Kafka批量消费&逐条消费详解

 更新时间:2026年02月06日 15:21:51   作者:C_Knight  
文章介绍了Kafka消费者的配置参数,包括批量消费和逐条消费的设置,在逐条消费模式下,消息会被分割成字符串数组,总结并提供了个人经验供参考

Kafka批量消费&逐条消费

消费者配置参数

    private Map<String, Object> defaultGoodsConsumerConfig() {
        Map<String, Object> props = Maps.newHashMap();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "ip:port");
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "100");
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "15000");
        props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, "50");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer
");
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer
");
        props.put("listener.type", "batch");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "modify-group");
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
        props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, “SASL_PLAINTEXT”);
        props.put(SaslConfigs.SASL_MECHANISM, defaultKafkaProperties.getSaslMechanism());
        props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username="###" password="###";
");

        return props;
    }

    @Bean(name = "defaultListenerContainerFactory")
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> defaultListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
        factory.setConsumerFactory(new DefaultKafkaConsumerFactory(defaultGoodsConsumerConfig()));
        factory.setConcurrency(4);
        factory.setBatchListener(true);
        factory.getContainerProperties().setPollTimeout(3000);
        log.info("KafkaDefaultConsumer factory获取实例:"+ JSON.toJSONString(factory));
        return factory;
    }
       ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
       factory.setConsumerFactory(new DefaultKafkaConsumerFactory(defaultGoodsConsumerConfig()));
       factory.setConcurrency(4);
       //批量消费,如果不设置默认是单条消费
       factory.setBatchListener(true);
       factory.getContainerProperties().setPollTimeout(3000);

消费者监听消息

    /**
     * 监听goods变更消息
     */
    @KafkaListener(id="sync-modify-goods", topics = "${kafka.sync.goods.topic}", concurrency = "4", containerFactory = "defaultListenerContainerFactory")
    public void updateListener(List<ConsumerRecord<String, String>> records){
        for (ConsumerRecord<String, String> msg:records) {
            GoodsChangeMsg changeMsg = null;
            try {
                changeMsg = JSONObject.parseObject(msg.value(), GoodsChangeMsg.class);
                syncGoodsProcessor.handle(changeMsg);
            }catch (Exception exception) {
                log.error("解析失败{}", msg, exception);
            }
        }
    }

List<ConsumerRecord<String, String>> records可以是String[] message

如果是逐条消费,这里配置list,kafka会根据字符串中的逗号进行分割,所以碰见该现象不要慌,看一下批量消费的配置。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现WebSocket四个步骤

    Java实现WebSocket四个步骤

    这篇文章主要为大家介绍了Java实现WebSocket的方法实例,只需要简单四个步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 一文详解Elasticsearch和MySQL之间的数据同步问题

    一文详解Elasticsearch和MySQL之间的数据同步问题

    Elasticsearch中的数据是来自于Mysql数据库的,因此当数据库中的数据进行增删改后,Elasticsearch中的数据,索引也必须跟着做出改变。本文主要来和大家探讨一下Elasticsearch和MySQL之间的数据同步问题,感兴趣的可以了解一下
    2023-04-04
  • 详细了解JAVA NIO之Buffer(缓冲区)

    详细了解JAVA NIO之Buffer(缓冲区)

    这篇文章主要介绍了JAVA NIO之Buffer(缓冲区)的相关资料,文中讲解非常细致,帮助大家更好的学习JAVA NIO,感兴趣的朋友可以了解下
    2020-07-07
  • SpringBoot整合EasyExcel的完整过程记录

    SpringBoot整合EasyExcel的完整过程记录

    easyexcel是阿里巴巴旗下开源项目,主要用于Excel文件的导入和导出处理,下面这篇文章主要给大家介绍了关于SpringBoot整合EasyExcel的完整过程,需要的朋友可以参考下
    2021-12-12
  • Java8 Stream流的常用方法汇总

    Java8 Stream流的常用方法汇总

    Java8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据,下面这篇文章主要给大家介绍了关于Java8 Stream流的常用方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java编程实现时间和时间戳相互转换实例

    Java编程实现时间和时间戳相互转换实例

    这篇文章主要介绍了什么是时间戳,以及Java编程实现时间和时间戳相互转换实例,具有一定的参考价值,需要的朋友可以了解下。
    2017-09-09
  • 聊聊java中引用数据类型有哪些

    聊聊java中引用数据类型有哪些

    这篇文章主要介绍了java中引用数据类型有哪些,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot实现线程池

    SpringBoot实现线程池

    现在由于系统越来越复杂,导致很多接口速度变慢,这时候就会想到可以利用线程池来处理一些耗时并不影响系统的操作。本文就介绍了SpringBoot线程池的使用,感兴趣的可以了解一下
    2021-06-06
  • springboot 如何解决static调用service为null

    springboot 如何解决static调用service为null

    这篇文章主要介绍了springboot 如何解决static调用service为null的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 基于Java编写一个PDF与Word文件转换工具

    基于Java编写一个PDF与Word文件转换工具

    前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具,感兴趣的可以了解一下
    2023-01-01

最新评论