面試連環炮系列(二十一):大家的項目怎麼使用kafka

  1. 大家的項目怎麼使用kafka?
    咱們採用kafka進行日誌採集,準確點說是ELK方案,即elasticsearch + logstash + kibana + kafka。經過Spring AOP的方式收集日誌,經過kafaka發送出去。緩存

  2. kafa存在丟消息的狀況嗎,怎麼解決?
    1. producer把消息發送給broker,由於網絡抖動,消息沒有到達broker,且開發人員無感知。
      解決方案:producer設置acks參數,消息同步到master以後返回ack信號,不然拋異常使應用程序感知到並在業務中進行重試發送。這種方式必定程度保證了消息的可靠性,producer等待broker確認信號的時延也不高。
    2. producer把消息發送給broker-master,master接收到消息,在未將消息同步給follower以前,掛掉了,且開發人員無感知。
      解決方案:producer設置acks參數,消息同步到master且同步到全部follower以後返回ack信號,不然拋異常使應用程序感知到並在業務中進行重試發送。這樣設置,在更大程度上保證了消息的可靠性,缺點是producer等待broker確認信號的時延比較高。
    3. producer把消息發送給broker-master,master接收到消息,master未成功將消息同步給每一個follower,有消息丟失風險。
      解決方案:同上。
    4. 某個broker消息還沒有從內存緩衝區持久化到磁盤,就掛掉了,這種狀況沒法經過ack機制感知。
      解決方案:設置參數,加快消息持久化的頻率,能在必定程度上減小這種狀況發生的機率。但提升頻率天然也會影響性能。
  3. Kafka怎麼作到高性能的?
    1. 順序寫磁盤:順序寫磁盤的性能比隨機寫入高不少倍。
    2. Page Cache:Kafka利用了操做系統自己的Page Cache,就是利用操做系統自身的內存而不是JVM空間內存。經過操做系統的Page Cache,Kafka的讀寫操做基本上是基於內存的,讀寫速度獲得了極大的提高。
    3. 零拷貝技術:零拷貝技術,能夠有效的減小上下文切換和拷貝次數。
  4. 詳細說說零拷貝技術
    傳統的讀取文件數據併發送到網絡的步驟以下:
    1. 操做系統將數據從磁盤文件中讀取到內核空間的頁面緩存;
    2. 應用程序將數據從內核空間讀入用戶空間緩衝區;
    3. 應用程序將讀到數據寫回內核空間並放入socket緩衝區;
    4. 操做系統將數據從socket緩衝區複製到網卡接口,此時數據才能經過網絡發送。

    「零拷貝技術」只用將磁盤文件的數據複製到頁面緩存中一次,而後將數據從頁面緩存直接發送到網絡中(發送給不一樣的訂閱者時,均可以使用同一個頁面緩存),避免了重複複製操做。若是有10個消費者,傳統方式下,數據複製次數爲4*10=40次,而使用「零拷貝技術」只須要1+10=11次,一次爲從磁盤複製到頁面緩存,10次表示10個消費者各自讀取一次頁面緩存。網絡

參考(摘抄的文字版權屬於原做者):

https://blog.csdn.net/qrne06/article/details/94225070
http://www.javashuo.com/article/p-yqqkoeug-b.html
https://www.jianshu.com/p/835ec2d4c170
http://www.javashuo.com/article/p-zkqumuag-b.html併發

相關文章
相關標籤/搜索