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;
    }
 

你可能感兴趣的:(Spring相关,大数据)