深入學習垃圾kafka
背景:
1. kafka是一個分布式、高吞吐率的消息系統
---- 早期版本
---- 重點在日志處理
2. kafka是一個分布式、流式平臺
---- 0.10
---- 天然支持stream處理
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



名詞解釋
- producer
- broker(中間人),依賴ZK,存儲一些元信息 + 領導選舉之類的
- consumer
- 細分
- Record(每一條數據)
- key-value
- timestmap
- Topic(一個消息類別)
- 邏輯概念
- 發布-訂閱基于topic
- Partition(分布在不同的broker中)
- 物理概念
- 一個Topic包含多個partition
- 每個partition物理上對應一個文件夾
- Segment
- 是文件,一個partition下的多個文件
- Consumer group
- 就是指定N:M,N個consumer消費M個partition
- Record(每一條數據)
關鍵點
- consumer使用pull機制而不用push機制(GO語言的NS-queue采用push),原因可以防止producer產生數據太快,但是consumer消費不過來一直積壓
- broker里面的數據是持久化的,consumer處理慢不會影響數據丟失
- pull方式會比push方式慢一點,因為不會一直pull數據,中間有一個時間間隔,或者使用long pulling也行但是還是沒push高
- producer需要使用SDK發送數據,SDK有內部數據隊列,會有丟棄數據風險(可以用立馬flush,變成同步模型)
- 寫數據(append only),順序寫
- 什么時候刪數據?只需要刪除最老的segment即可
- 默認SDK發送會有多條TCP鏈接,這樣會導致發送順序亂掉,解決方法是設置TCP連接數為1
- consumer group是如何reblance的?(集中式rebalance)
- coordinator決定
- ISR復制模式 (In Sync Replace,每次都是一批一批數據過來的)
- 發送數據去partition的leader
- follower有兩個容忍
- 接受K條消息落后,超過踢掉(舊版本)
- 接受K秒消息落后,超過踢掉
- 假如leader掛了,就會在ISR里面宿便選一個
- 如何實現exactly once
- 兩階段提交
- 冪等接口
- offset和數據庫放在同一個事務
既然選擇了遠方,就要風雨兼程~
posted on 2021-02-25 16:04 stupid_one 閱讀(126) 評論(1) 收藏 舉報
浙公網安備 33010602011771號