-
你們的項目怎麼使用kafka?
我們采用kafka進行日志采集,準确點說是ELK方案,即elasticsearch + logstash + kibana + kafka。通過Spring AOP的方式收集日志,通過kafaka發送出去。
- kafa存在丢消息的情況嗎,怎麼解決?
-
producer把消息發送給broker,因為網絡抖動,消息沒有到達broker,且開發人員無感覺。
解決方案:producer設定acks參數,消息同步到master之後傳回ack信号,否則抛異常使應用程式感覺到并在業務中進行重試發送。這種方式一定程度保證了消息的可靠性,producer等待broker确認信号的時延也不高。
-
producer把消息發送給broker-master,master接收到消息,在未将消息同步給follower之前,挂掉了,且開發人員無感覺。
解決方案:producer設定acks參數,消息同步到master且同步到所有follower之後傳回ack信号,否則抛異常使應用程式感覺到并在業務中進行重試發送。這樣設定,在更大程度上保證了消息的可靠性,缺點是producer等待broker确認信号的時延比較高。
-
producer把消息發送給broker-master,master接收到消息,master未成功将消息同步給每個follower,有消息丢失風險。
解決方案:同上。
-
某個broker消息尚未從記憶體緩沖區持久化到磁盤,就挂掉了,這種情況無法通過ack機制感覺。
解決方案:設定參數,加快消息持久化的頻率,能在一定程度上減少這種情況發生的機率。但提高頻率自然也會影響性能。
-
- Kafka怎麼做到高性能的?
- 順序寫磁盤:順序寫磁盤的性能比随機寫入高很多倍。
- Page Cache:Kafka利用了作業系統本身的Page Cache,就是利用作業系統自身的記憶體而不是JVM空間記憶體。通過作業系統的Page Cache,Kafka的讀寫操作基本上是基于記憶體的,讀寫速度得到了極大的提升。
- 零拷貝技術:零拷貝技術,可以有效的減少上下文切換和拷貝次數。
-
詳細說說零拷貝技術
傳統的讀取檔案資料并發送到網絡的步驟如下:
- 作業系統将資料從磁盤檔案中讀取到核心空間的頁面緩存;
- 應用程式将資料從核心空間讀入使用者空間緩沖區;
- 應用程式将讀到資料寫回核心空間并放入socket緩沖區;
- 作業系統将資料從socket緩沖區複制到網卡接口,此時資料才能通過網絡發送。
參考(摘抄的文字版權屬于原作者):
https://blog.csdn.net/qrne06/article/details/94225070
https://blog.csdn.net/assasin0308/article/details/91638528
https://www.jianshu.com/p/835ec2d4c170
https://blog.csdn.net/lxlmycsdnfree/article/details/78973864
作者:編碼磚家
公衆号:編碼磚家
出處:https://www.cnblogs.com/xiaoyangjia/
本文版權歸作者和部落格園共有,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置注明作者和原文連結。