最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot集成Kafka進行批量消費及踩坑點

 更新時間:2021年12月14日 11:44:53   作者:秀強  
本文主要介紹了Springboot集成Kafka進行批量消費及踩坑點,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

引入依賴

            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka</artifactId>
                <version>1.3.11.RELEASE</version>
            </dependency>

因為我的項目的 springboot 版本是 1.5.22.RELEASE,所以引的是 1.3.11.RELEASE 的包。讀者可以根據(jù)下圖來自行選擇對應的版本。圖片更新可能不及時,詳情可查看spring-kafka 官方網(wǎng)站。

在這里插入圖片描述

注:這里有個踩坑點,如果引入包版本不對,項目啟動時會拋出org.springframework.core.log.LogAccessor 異常:

java.lang.ClassNotFoundException: org.springframework.core.log.LogAccessor

創(chuàng)建配置類

    /**
     * kafka 配置類
     */
    @Configuration
    @EnableKafka
    public class KafkaConsumerConfig {

        private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(KafkaConsumerConfig.class);

        @Value("${kafka.bootstrap.servers}")
        private String kafkaBootstrapServers;

        @Value("${kafka.group.id}")
        private String kafkaGroupId;

        @Value("${kafka.topic}")
        private String kafkaTopic;

        public static final String CONFIG_PATH = "/home/admin/xxx/BOOT-INF/classes/kafka_client_jaas.conf";

        public static final String LOCATION_PATH = "/home/admin/xxx/BOOT-INF/classes/kafka.client.truststore.jks";


        @Bean
        public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
            ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
            factory.setConsumerFactory(consumerFactory());
            // 設置并發(fā)量,小于或者等于 Topic 的分區(qū)數(shù)
            factory.setConcurrency(5);
            // 設置為批量監(jiān)聽
            factory.setBatchListener(Boolean.TRUE);
            factory.getContainerProperties().setPollTimeout(30000);
            return factory;
        }

        public ConsumerFactory<String, String> consumerFactory() {
            return new DefaultKafkaConsumerFactory<>(consumerConfigs());
        }

        public Map<String, Object> consumerConfigs() {
            Map<String, Object> props = new HashMap<>();
            //設置接入點,請通過控制臺獲取對應Topic的接入點。
            props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers);
            //設置SSL根證書的路徑,請記得將XXX修改為自己的路徑。
            //與SASL路徑類似,該文件也不能被打包到jar中。
            System.setProperty("java.security.auth.login.config", CONFIG_PATH);
            props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, LOCATION_PATH);

            //根證書存儲的密碼,保持不變。
            props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, "KafkaOnsClient");
            //接入?yún)f(xié)議,目前支持使用SASL_SSL協(xié)議接入。
            props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
            //SASL鑒權(quán)方式,保持不變。
            props.put(SaslConfigs.SASL_MECHANISM, "PLAIN");
            // 自動提交
            props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, Boolean.TRUE);
            //兩次Poll之間的最大允許間隔。
            //消費者超過該值沒有返回心跳,服務端判斷消費者處于非存活狀態(tài),服務端將消費者從Consumer Group移除并觸發(fā)Rebalance,默認30s。
            props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 30000);
            //設置單次拉取的量,走公網(wǎng)訪問時,該參數(shù)會有較大影響。
            props.put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG, 32000);
            props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, 32000);
            //每次Poll的最大數(shù)量。
            //注意該值不要改得太大,如果Poll太多數(shù)據(jù),而不能在下次Poll之前消費完,則會觸發(fā)一次負載均衡,產(chǎn)生卡頓。
            props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 30);
            //消息的反序列化方式。
            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(ConsumerConfig.GROUP_ID_CONFIG, kafkaGroupId);
            //Hostname校驗改成空。
            props.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, "");
            return props;
        }
    }

注:此處通過 factory.setConcurrency(5); 配置了并發(fā)量為 5 ,假設我們線上的 Topic 有 12 個分區(qū)。那么將會是 3 個線程分配到 2 個分區(qū),2 個線程分配到 3 個分區(qū),3 * 2 + 2 * 3 = 12。

Kafka 消費者

    /**
     * kafka 消息消費類
     */
    @Component
    public class KafkaMessageListener {

        private static final Logger LOGGER = LoggerFactory.getLogger(KafkaMessageListener.class);

        @KafkaListener(topics = {"${kafka.topic}"})
        public void listen(List<ConsumerRecord<String, String>> recordList) {
            for (ConsumerRecord<String,String> record : recordList) {
                // 打印消息的分區(qū)以及偏移量
                LOGGER.info("Kafka Consume partition:{}, offset:{}", record.partition(), record.offset());
                String value = record.value();
                System.out.println("value = " + value);
                // 處理業(yè)務邏輯 ...
            }
        }
    }

因為我在配置類中設置了批量監(jiān)聽,所以此處 listen 方法的入?yún)⑹荓ist:List<ConsumerRecord<String, String>>。

到此這篇關(guān)于Springboot集成Kafka進行批量消費及踩坑點的文章就介紹到這了,更多相關(guān)Springboot Kafka批量消費內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)數(shù)據(jù)導入導出與報表生成的完整教程

    SpringBoot實現(xiàn)數(shù)據(jù)導入導出與報表生成的完整教程

    本文將帶你掌握Spring Boot數(shù)據(jù)導入導出與報表生成的核心概念與使用方法,包括數(shù)據(jù)導入導出的定義與特點,幫你學會在實際開發(fā)中處理數(shù)據(jù)導入導出與報表生成問題
    2026-04-04
  • MyBatis-Plus?中?typeHandler?的使用實例詳解

    MyBatis-Plus?中?typeHandler?的使用實例詳解

    本文介紹了在MyBatis-Plus中如何使用typeHandler處理json格式字段和自定義typeHandler,通過使用JacksonTypeHandler,可以簡單實現(xiàn)將實體類字段轉(zhuǎn)換為json格式存儲,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Eclipse快捷鍵使用小結(jié)

    Eclipse快捷鍵使用小結(jié)

    Eclipse是用java的同行必不可少的工具,我總結(jié)了一下它的快捷鍵,太常用的ctrl+單擊、ctrl+shift+F、Ctrl+1等我就不細說了,主要是方便查看。下邊小編就詳細的為大家介紹一下
    2013-07-07
  • servlet之session簡介_動力節(jié)點Java學院整理

    servlet之session簡介_動力節(jié)點Java學院整理

    這篇文章主要介紹了servlet之session簡介,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java項目--家庭收支記錄程序

    Java項目--家庭收支記錄程序

    本文主要介紹Java基礎階段的一個小項目——家庭收支記錄程序(附完整源代碼),本項目所用到的主要知識點:基本語法、數(shù)組和方法。本項目并不難,主要是對Java初學者的基礎綜合運用的訓練及檢驗
    2021-07-07
  • 詳解java如何解析和生成sql

    詳解java如何解析和生成sql

    JSQLParser?是一個開源的?Java?庫,用于解析?SQL?語句并將其轉(zhuǎn)換為抽象語法樹,下面我們就來看看java是如何使用JSQLParser解析和生成sql的吧
    2024-12-12
  • Java進階:JNI使用技巧點滴

    Java進階:JNI使用技巧點滴

    Java進階:JNI使用技巧點滴...
    2006-12-12
  • java的多重注解(重復注解)詳解

    java的多重注解(重復注解)詳解

    文章主要講述了Java中多重注解的使用,包括Java7和Java8兩種方式,在Java7中,通過自定義注解容器來實現(xiàn)多重注解;而在Java8中,可以使用@Repeatable注解來實現(xiàn)多重注解,使代碼更加簡潔
    2026-01-01
  • Java字符串寫入文件三種方式的實現(xiàn)

    Java字符串寫入文件三種方式的實現(xiàn)

    這篇文章主要介紹了 Java字符串寫入文件三種方式的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java中volatile關(guān)鍵字實現(xiàn)原理

    Java中volatile關(guān)鍵字實現(xiàn)原理

    本文詳細解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對Java中volatile關(guān)鍵字實現(xiàn)原理感興趣的朋友一起通過本文學習吧
    2017-06-06

最新評論

山阴县| 巴林左旗| 彭水| 皮山县| 迭部县| 如东县| 织金县| 翼城县| 南靖县| 东平县| 遵义市| 油尖旺区| 蓝山县| 田东县| 方山县| 南开区| 静海县| 科尔| 申扎县| 太原市| 浑源县| 邯郸县| 德钦县| 观塘区| 德江县| 竹溪县| 舞阳县| 沧州市| 米林县| 浠水县| 灵寿县| 夏津县| 枣庄市| 鄯善县| 长丰县| 拜城县| 当涂县| 类乌齐县| 原平市| 文登市| 南部县|