Kafka 2.0課程 3 Kafka理論
Producers
- Producers寫入資料給Topics(由多個partitions組成的Topic)
- Producers自動解析要寫入哪一個broker及partition
- 當有Broker掛掉,Producer將自動復原
- 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
- Consumers從topic讀取資料(topic由名稱區分)
- Consumers知曉該從哪一個broker讀取資料
- 當broker掛掉,Consumers會自動復原
- 每一個partitions將依序(offset順序)被讀取
Consumer Groups
(概念上Consumer可能是Java App之類的程式)
- Consumers依據Consumer groups讀取資料
- 一個goup內的一個consumer只讀取獨立完整的patition
- 當有超過Partition數量的Consumer,則該Consumer將變成inactive
Consumer Offsets
- Kafka儲存已被Consumer group讀取的offsets
- Kafka topic用__consumer_offsets來紀錄offset的commit
- 當一個Consumer group中的Consumer完成處理接收來自Kafka的data後,就會通知Kafka此offset已commit
- 當某個Consumer掛掉,由於有commit consumer offset機制,將會從尚未commit的部分開始讀取
Delivery semantics for consumers
- Consumer決定何時commit offsets
- 有三種傳輸警示機制
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