Kafka 2.0課程 3 Kafka理論

Kafka特殊名詞解釋 PART 2

ZONGRU Li
Dec 9, 2019

Producers

  1. Producers寫入資料給Topics(由多個partitions組成的Topic)
  2. Producers自動解析要寫入哪一個broker及partition
  3. 當有Broker掛掉,Producer將自動復原
  4. Producer可以選擇接收資料寫入的確認(acknowledgment):
  • acknowledgment指同步確認synonym for confirmation;
  • acks=0:Producer將不會等待acknowledgment(可能資料遺失) ;
  • acks=1:為預設值,Producer將等待Leader acknowledgment(限制資料遺失)
  • acks=all:Leader + replicas acknowledgment (無資料遺失)

Producers:Message Keys

1.Producer可選擇性的傳送帶有key的訊息(字串,數字,etc)

2.當key=null,data就循環傳送(broker 101 然後broker 102然後broker 103…)

3.當key傳送出去了,此key所帶的全部訊息將會給到同一個partition

4.通常key的傳送伴隨著需要排列的訊息資訊,如truck_id這種屬性資料

Consumers

  1. Consumers從topic讀取資料(topic由名稱區分)
  2. Consumers知曉該從哪一個broker讀取資料
  3. 當broker掛掉,Consumers會自動復原
  4. 每一個partitions將依序(offset順序)被讀取
Partition 1與2平行被Consumer讀取,順序只有各自的offset

Consumer Groups

(概念上Consumer可能是Java App之類的程式)

  1. Consumers依據Consumer groups讀取資料
  2. 一個goup內的一個consumer只讀取獨立完整的patition
  3. 當有超過Partition數量的Consumer,則該Consumer將變成inactive
Consumer 4將會是inactive,直到其他Consumer有一個掛掉

Consumer Offsets

  1. Kafka儲存已被Consumer group讀取的offsets
  2. Kafka topic用__consumer_offsets來紀錄offset的commit
  3. 當一個Consumer group中的Consumer完成處理接收來自Kafka的data後,就會通知Kafka此offset已commit
  4. 當某個Consumer掛掉,由於有commit consumer offset機制,將會從尚未commit的部分開始讀取
Consumer通知Kafka該commit 4262 offset,當Consumer掛掉重啟後,Kafka留有紀錄請從4262之後開始

Delivery semantics for consumers

  1. Consumer決定何時commit offsets
  2. 有三種傳輸警示機制

At most once:

  • 當訊息接收完畢立即commit offset
  • 當處理過程出錯,訊息可能會遺失(無法再次讀取)

At least once(建議使用):

  • 訊息處理完畢才執行offset commit
  • 當處理過程出錯,訊息有機會重讀
  • 這可能造成訊息的重複處理!所以要確定處理過程各自獨立,同樣訊息重複處理不會影響系統

Exactly once:

  • Kafka to Kafka,使用Kafka stream API的Kafka workflow
  • Kafka to 其他系統workflow(例如DB),意即idempotent consumer

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet