4、Kafka常见问题
2019獨角獸企業重金招聘Python工程師標準>>>
1、connection with xxxxx disconnected
原理是:connections.max.idle.ms參數指定了consumer超過空閑時間就會斷開連接,默認是600秒,但是一旦有數據上來還是可以繼續消費。
參考資料:https://stackoverflow.com/questions/33432027/kafka-error-in-i-o-java-io-eofexception-null
2、kafka consumer機器必須在hosts中配置broker機器名和ip映射否則拿不了數據,也不報錯,就是阻塞在那里
原因是:連接broker后,返回來的是機器名稱,沒法映射為ip
3、KafkaConsumer is not safe for multi-threaded access
單個kafkaConsumer對象不能給多線程并發訪問。 這個問題經常在spark中遇到spark-19185,因為spark多分支并發處理數據時,是需要多次調用consumer那數據,解決辦法是去掉consumer緩存 conf.set("spark.streaming.kafka.consumer.cache.enabled", "false");
注意:producer就可以
4、kafka offset out of range異常
kafka會定期5分鐘掃描并刪除過期(默認7天)的數據,所以sparkstreaming處理延遲、掛了很久才啟動、或者有window操作,很有可能會導致此異常,可以通過自己管理offset來解決。
5、consumer和cooridanate心跳失敗,reblance
每個consumer默認3S和協調器心跳,如果沒有心跳則協調器認為其失效,再過session= 10S中還沒有心跳,就會進行reblace。 一般什么情況會導致心跳失敗呢?
-
5.1、網絡原因,一般不可能,都是在內網
-
5.2、consumer線程所在進程/程序cpu資源不夠,比如線上遇到過topic 120個partition,兩個2core的executor處理,每個executor就需要負擔60個consumer線程,而且還要處理業務數據,cpu資源遠遠不夠,導致沒法正常保持心跳。
6、topic分區數量設置經驗
-
6.1、多少個broker多少個分區。
-
6.2、如果broker少,但是數據量大,也可以整倍增加partition,這不是為了提高處理速度,而是為了spark-streaming這種直連方式時能夠得到更高的并發量。
-
6.3、增加分區數(只能加不能減)
kafka-topics --zookeeper zk01:2181/kafka --alter --topic utopic --partitions 15
增加分區后,新分區的leader一時還沒有選舉出來,導致topic短時間內不可用,還會報如下錯誤:
原因是:kafka會在log.dirs配置項的路徑下維護這兩個和offset相關的值
1. replication-offset-checkpoint2. recovery-point-offset-checkpoint解決辦法:刪除所有log文件夾下的這兩個文件即可
參考鏈接:https://community.hortonworks.com/content/supportkb/150284/error-malformed-line-in-offset-checkpoint-file-occ.html
轉載于:https://my.oschina.net/liufukin/blog/800426
總結
以上是生活随笔為你收集整理的4、Kafka常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复杂网络环境下的访问控制技术
- 下一篇: PHP|Yii2下通过插件进行图片处理(