日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汽车位置服务之kafka集群配置注意事项

發布時間:2024/9/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汽车位置服务之kafka集群配置注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ?

1)? 重復消費問題。

問題描述?
采用kafka讀取消息進行處理時,consumer會重復讀取afka隊列中的數據。

問題原因?
kafka的consumer消費數據時首先會從broker里讀取一批消息數據進行處理,處理完成后再提交offset。而我們項目中的consumer消費能力比較低,導致取出的一批數據在session.timeout.ms時間內沒有處理完成,自動提交offset失敗,然后kafka會重新分配partition給消費者,消費者又重新消費之前的一批數據,又出現了消費超時,所以會造成死循環,一直消費相同的數據。

解決方案?
項目中使用的是spring-kafka,所以把kafka消費者的配置enable.auto.commit設為false,禁止kafka自動提交offset,從而使用spring-kafka提供的offset提交策略。spring-kafka中的offset提交策略可以保證一批消息數據沒有完成消費的情況下,也能提交offset,從而避免了提交失敗而導致永遠重復消費的問題。

?

2) Server.properties配置問題

borker,partition,replica 的配置之間的關系。

約束關系:Topic Partition Replicas Size <= Kafka Brokers Size。

創建Topic時直接指定Topic Partition Replica與Kafka Broker之間的存儲映射關系

例如:kafka_2.10-0.8.2.1/bin/kafka-topics.sh --zookeeper ZooKeeperHost:ZooKeeperPort --create --topic TopicName --replica-assignment id0:id1:id2,id3:id4:id5,id6:id7:id8

其中,“id0:id1:id2,id3:id4:id5,id6:id7:id8”表示Topic TopicName一共有3個Partition(以“,”分隔),每個Partition均有3個Replica(以“:”分隔)

我們的策略:replicas >=2 ,確保有一個副本;partion=cpu cores,最大化利用多核并發。Brokers>=3 。根據gps數據量,系統吞吐量具體設計。

?

3) Zookeeper 問題。

Kafka集群強烈依賴zookeeper 來做集群的配置,狀態,failover等機制。如果zookeeper集群出行問題,kafka集群也會不可用。所以要確保zookeeper集群的健康健壯。商用系統最少是3個zookeeper 集群節點,條件允許,應該是5個節點。

?

?

4) 消息保存時間。

無論消息是否被消費,kafka 都會保留所有消息。有兩種策略可以刪除舊數據:

?

1. 基于時間:log.retention.hours=168

2. 基于大小:log.retention.bytes=1073741824

需要注意的是,因為Kafka讀取特定消息的時間復雜度為O(1),即與文件大小無關,所以這里刪除過期文件與提高 Kafka 性能無關。我們選擇基于文件大小的配置即可。

?

5) 機器內存配置,文件配置

內存不能少于1G,最好2G。/bin/zookeeper-server-start.sh 中的內存配置。

??

6) consumer group問題

high-level consumer API 提供了 consumer group 的語義,一個消息只能被 group 內的一個 consumer 所消費,且 consumer 消費消息時不關注 offset,最后一個 offset 由 zookeeper 保存。

?

使用 high-level consumer API 可以是多線程的應用,應當注意:

?1. 如果消費線程大于 patition 數量,則有些線程將收不到消息

2. 如果 patition 數量大于線程數,則有些線程多收到多個 patition 的消息

3. 如果一個線程消費多個 patition,則無法保證你收到的消息的順序,而一個 patition 內的消息是有序的

例如:我們根據車牌號設計消息路由到指定的partion,多線程消費時,在提升gps數據解析性能的情況下,每輛車的gps時序也不會錯亂。每個消費線程消費一個partion的數據,多線程則可以并行處理多個partion的gps數據。

轉載于:https://www.cnblogs.com/daila/p/9148869.html

總結

以上是生活随笔為你收集整理的汽车位置服务之kafka集群配置注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。