Kafka发送大message配置

kafka达到最佳吞吐量的消息大小是10k,然而有些场景需要kafka发送很大的消息,比如消息中含有base64格式的图片或短视频信息等。

项目中采用的spring集成kafka模块,如需支持大消息发送,需要进行以下两个方面的配置:

1.Kafka服务配置

1.1 broker配置

server.properties中添加:

  • message.max.bytes :20000000(20M),这是单个消息的最大值,kafka默认好像是1M左右
  • **replica.fetch.max.bytes **:21000000(21M),这是单个消息的最大值broker可复制的消息的最大字节数,比message.max.bytes大,否则broker会接收此消息,但无法将此消息复制出去,从而造成数据丢失,但是不能太大!!!不然复制的时候容易内存溢出
1.2 producer配置

producer.properties中添加:

  • max.request.size: 20000000(20M), 这是生产者能请求的最大消息,大于或等于message.max.bytes
1.3 consumer配置

consumer.properties中添加:

  • fetch.message.max.bytes: 21000000(21M), 这是消费者能读取的最大消息,大于或等于message.max.bytes

2.Spring配置

yml或者propertise中配置max.request.size,但实测不生效,需要java中写config,具体的配置可在https://kafka.apache.org/documentation/#producerconfigs中查找,如下进行java的kafka配置:

@Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"10.10.100.100:9092");
        props.put(ProducerConfig.RETRIES_CONFIG, 3);
        //每次批量发送消息的数量(吞吐量和延时性能),默认16k,batch 越小,producer的吞吐量越低, 
        props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
        props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432); //默认32M
        props.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 50000000);
        //# 指定消息key和消息体的编解码方式
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return props;
    }
 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值