汽车位置服务之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集群配置注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Server 2008
- 下一篇: B - Calculating Func