国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

kafka消費者程序日志報錯Offset commit failed問題研究

這篇具有很好參考價值的文章主要介紹了kafka消費者程序日志報錯Offset commit failed問題研究。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

生產(chǎn)環(huán)境偶爾會遇到kafka消費者程序日志報錯的問題

截取主要日志如下:

2023-10-02 19:35:28.554 {trace: d7f97f70dd693e3d} ERROR[Thread-49:137] ConsumerCoordinator$OffsetCommitResponseHandler.handle(812) - [Consumer clientId=consumer-1, groupId=cid_yingzi_fpf_group_device] Offset commit failed on partition topic_dvc_telemetery_bh_bh100-1 at offset 4313614: The request timed out.

2023-10-02 19:35:28.554 {trace: d7f97f70dd693e3d} INFO [Thread-49:137] AbstractCoordinator.markCoordinatorUnknown(727) - [Consumer clientId=consumer-1, groupId=cid_yingzi_fpf_group_device] Group coordinator kafka02.yingzi.com:19292 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery

kafka客戶端版本為2.2.0

結(jié)合日志去閱讀代碼,只能大概定位到,是客戶端程序向server發(fā)送commit offset請求的時候,server返回的錯誤信息是:The request timed out

看到 request timed out,第一時間很可能會誤以為是客戶端向server發(fā)送請求超時了。但是查看OffsetCommitResponseHandler.handle()的代碼,發(fā)現(xiàn)server是成功返回信息了的。
server返回的數(shù)據(jù)是一個Map<TopicPartition, Errors>結(jié)構(gòu),每個partition都對應(yīng)一個Errors結(jié)果,如果Errors為Errors.NONE,則表示offset提交成功。
如果Errors不為Errors.NONE,則打印錯誤日志,也就是上面的 Offset commit failed … The request timed out的日志,每個partition打印1條日志。
也就是說,問題發(fā)生在server內(nèi)部處理的時候,可以排除掉是客戶端和server的網(wǎng)絡(luò)問題導(dǎo)致的超時

要繼續(xù)深挖,需要了解下server的處理邏輯,server的入口代碼在KafkaApis.handleOffsetCommitRequest()
查看代碼邏輯,可以發(fā)現(xiàn)早期的offset是保存在zk中,新版本中改為存在kafka的topic中(往__consumer_offsets這個topic發(fā)消息,每個partition一條offset消息)
那么分析下來,大概率就是往__consumer_offsets topic發(fā)消息的時候,產(chǎn)生了超時

繼續(xù)閱讀client的代碼,了解Offset commit的機制
在KafkaConsumer.poll()的代碼中,每次拉取消息時,都會調(diào)用updateAssignmentMetadataIfNeeded()這個方法,這個方法最終會調(diào)用maybeAutoCommitOffsetsAsync()方法
maybeAutoCommitOffsetsAsync()方法根據(jù)autoCommitIntervalMs來判斷,是否要提交offset
這里默認是5秒執(zhí)行一次commit offset請求,每次會把訂閱的所有topic和partition的信息都進行提交
每個topic每個partition對應(yīng)1條消息,如果topic非常多的話,那往__consumer_offsets發(fā)送消息量也會很大

查看生產(chǎn)kafka的監(jiān)控,__consumer_offsets每秒消息量大概為四五千
顯然是不太合理的
于是通過命令去消費__consumer_offsets的數(shù)據(jù)進行查看,注意由于這里消息是序列化的,直接消費的話會顯示亂碼,要通過-formatter "kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter"去進行消息解碼

測試環(huán)境消費命令如下:

/opt/software/kafka/kafka_2.11-2.0.0_test_yewu/bin/kafka-console-consumer.sh --topic __consumer_offsets --group yz.bigdata.tzy --bootstrap-server kafka-test01.yingzi.com:32295 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" --consumer.config config/consumer.properties

生產(chǎn)環(huán)境統(tǒng)計的消息量最多的group如下(消費25秒):

37485 cid_opf_scene_edgengine_offline_alarm
27216 idp_share_telemetery_scene
25776 idp_scene_lifecycle_offline_alarm
4892 cid_scene_dvc_tele_attr
1440 yingzi-scene-space-group
546 clickhouse-iotcenter-latest-rep
533 re-Main-consumer-b
533 clickhouse-iotcenter-rep
437 yingzi-bizcenter-dvc-telemetery-group
318 cid_yingzi_hwm_group
288 cid_yingzi_fpf_group_device
270 transport-b-node-tb-mqtt-transport-ca-b-8
258 transport-b-node-tb-mqtt-transport-ca-b-6
222 transport-b-node-tb-mqtt-transport-ca-b-5
208 tb-core-b-consumer
200 yz.bigdata.wns

排名前幾的都是跟設(shè)備有關(guān)的,消費幾百個topic
按照上面的分析,每個group每秒發(fā)送的消息量應(yīng)該為:1 / auto-commit-interval * Sum(topic partirionNum)
但是實際計算下來,感覺不應(yīng)該這么高才對

先針對cid_opf_scene_edgengine_offline_alarm這個group進行查看,這個group訂閱的topic有250個,每個topic 6個partition
1/52506=300
但是實際37485/25 = 1500
差了5倍之多

于是找到對應(yīng)的開發(fā)人員,查看kafka的配置,發(fā)現(xiàn)配置:spring.kafka.consumer.auto-commit-interval=1000

提交offset的間隔默認5秒,被人工修改為1秒,正好相差5倍
其他兩個消息量很高的group,經(jīng)分析也是一樣的問題

溝通后建議還是把spring.kafka.consumer.auto-commit-interval配置改回默認值,后續(xù)再繼續(xù)進行觀察

當(dāng)然問題的根本原因其實還是設(shè)計不合理,kafka的性能本身就是會隨著topic的增多而降低的,設(shè)計上應(yīng)該盡量避免產(chǎn)生很多個topic才對,這里就不再展開討論了文章來源地址http://www.zghlxwxcb.cn/news/detail-725501.html

到了這里,關(guān)于kafka消費者程序日志報錯Offset commit failed問題研究的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Kafka學(xué)習(xí)---4、消費者(分區(qū)消費、分區(qū)平衡策略、offset、漏消費和重復(fù)消費)

    Kafka學(xué)習(xí)---4、消費者(分區(qū)消費、分區(qū)平衡策略、offset、漏消費和重復(fù)消費)

    1.1 Kafka消費方式 1、pull(拉)模式:consumer采用從broker中主動拉取數(shù)據(jù)。 2、push(推)模式:Kafka沒有采用這種方式。因為broker決定消息發(fā)生速率,很難適應(yīng)所有消費者的消費速率。例如推送的速度是50M/s,Consumer1、Consumer2就來不及處理消息。 pull模式不足之處是如果Kafka沒有數(shù)

    2024年02月16日
    瀏覽(24)
  • Kafka3.0.0版本——消費者(自動提交 offset)

    Kafka3.0.0版本——消費者(自動提交 offset)

    官網(wǎng)文檔 參數(shù)解釋 參數(shù) 描述 enable.auto.commi 默認值為 true,消費者會自動周期性地向服務(wù)器提交偏移量。 auto.commit.interval.ms 如果設(shè)置了 enable.auto.commit 的值為 true, 則該值定義了消費者偏移量向 Kafka 提交的頻率,默認 5s。 圖解分析 消費者自動提交 offset代碼 消費者自動提交

    2024年02月09日
    瀏覽(28)
  • Kafka3.0.0版本——消費者(手動提交offset)

    Kafka3.0.0版本——消費者(手動提交offset)

    1.1、手動提交offset的兩種方式 commitSync(同步提交):必須等待offset提交完畢,再去消費下一批數(shù)據(jù)。 commitAsync(異步提交) :發(fā)送完提交offset請求后,就開始消費下一批數(shù)據(jù)了。 1.2、手動提交offset兩種方式的區(qū)別 相同點:都會將本次提交的一批數(shù)據(jù)最高的偏移量提交。 不

    2024年02月09日
    瀏覽(28)
  • Kafka-Java四:Spring配置Kafka消費者提交Offset的策略

    Kafka消費者提交Offset的策略有 自動提交Offset: 消費者將消息拉取下來以后未被消費者消費前,直接自動提交offset。 自動提交可能丟失數(shù)據(jù),比如消息在被消費者消費前已經(jīng)提交了offset,有可能消息拉取下來以后,消費者掛了 手動提交Offset 消費者在消費消息時/后,再提交o

    2024年02月08日
    瀏覽(23)
  • Kafka篇——Kafka消費者端常見配置,涵蓋自動手動提交offset、poll消息細節(jié)、健康狀態(tài)檢查、新消費組消費offset規(guī)則以及指定分區(qū)等技術(shù)點配置,全面無死角,一篇文章拿下!

    Kafka篇——Kafka消費者端常見配置,涵蓋自動手動提交offset、poll消息細節(jié)、健康狀態(tài)檢查、新消費組消費offset規(guī)則以及指定分區(qū)等技術(shù)點配置,全面無死角,一篇文章拿下!

    一、自動提交offset 1、概念 Kafka中默認是自動提交offset。消費者在poll到消息后默認情況下,會自動向Broker的_consumer_offsets主題提交當(dāng)前 主題-分區(qū)消費的偏移量 2、自動提交offset和手動提交offset流程圖 3、在Java中實現(xiàn)配置 4、自動提交offset問題 自動提交會丟消息。因為如果消費

    2024年01月22日
    瀏覽(22)
  • 13、Kafka ------ kafka 消費者API用法(消費者消費消息代碼演示)

    13、Kafka ------ kafka 消費者API用法(消費者消費消息代碼演示)

    消費者API的核心類是 KafkaConsumer,它提供了如下常用方法: 下面這些方法都體現(xiàn)了Kafka是一個數(shù)據(jù)流平臺,消費者通過這些方法可以從分區(qū)的任意位置、重新開始讀取數(shù)據(jù)。 根據(jù)KafkaConsumer不難看出,使用消費者API拉取消息很簡單,基本只要幾步: 1、創(chuàng)建KafkaConsumer對象,創(chuàng)建

    2024年04月11日
    瀏覽(30)
  • 分布式 - 消息隊列Kafka:Kafka消費者和消費者組

    分布式 - 消息隊列Kafka:Kafka消費者和消費者組

    1. Kafka 消費者是什么? 消費者負責(zé)訂閱Kafka中的主題,并且從訂閱的主題上拉取消息。與其他一些消息中間件不同的是:在Kafka的消費理念中還有一層消費組的概念,每個消費者都有一個對應(yīng)的消費組。當(dāng)消息發(fā)布到主題后,只會被投遞給訂閱它的每個消費組中的一個消費者

    2024年02月13日
    瀏覽(29)
  • kafka配置多個消費者groupid kafka多個消費者消費同一個partition(java)

    kafka配置多個消費者groupid kafka多個消費者消費同一個partition(java)

    kafka是由Apache軟件基金會開發(fā)的一個開源流處理平臺。kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費者在網(wǎng)站中的所有動作流數(shù)據(jù)。 kafka中partition類似數(shù)據(jù)庫中的分表數(shù)據(jù),可以起到水平擴展數(shù)據(jù)的目的,比如有a,b,c,d,e,f 6個數(shù)據(jù),某個topic有兩個partition,一

    2024年01月22日
    瀏覽(161)
  • Kafka3.0.0版本——消費者(消費者組詳細消費流程圖解及消費者重要參數(shù))

    Kafka3.0.0版本——消費者(消費者組詳細消費流程圖解及消費者重要參數(shù))

    創(chuàng)建一個消費者網(wǎng)絡(luò)連接客戶端,主要用于與kafka集群進行交互,如下圖所示: 調(diào)用sendFetches發(fā)送消費請求,如下圖所示: (1)、Fetch.min.bytes每批次最小抓取大小,默認1字節(jié) (2)、fetch.max.wait.ms一批數(shù)據(jù)最小值未達到的超時時間,默認500ms (3)、Fetch.max.bytes每批次最大抓取大小,默

    2024年02月09日
    瀏覽(21)
  • 10、Kafka ------ 消費者組 和 消費者實例,分區(qū) 和 消費者實例 之間的分配策略

    10、Kafka ------ 消費者組 和 消費者實例,分區(qū) 和 消費者實例 之間的分配策略

    形象來說:你可以把主題內(nèi)的多個分區(qū)當(dāng)成多個子任務(wù)、多個子任務(wù)組成項目,每個消費者實例就相當(dāng)于一個員工,假如你們 team 包含2個員工。 同理: 同一主題下,每個分區(qū)最多只會分給同一個組內(nèi)的一個消費者實例 消費者以組的名義來訂閱主題,前面的 kafka-console-consu

    2024年01月19日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包