1.2.1 消息和批次
- Kafka的數(shù)據(jù)單元被稱為消息。
- 消息被分批次寫入kafka,批次就是一組消息,這些消息屬于同一個主題和分區(qū)。
1.2.3 主題和分區(qū)
- Kafka消息通過主題進行分類。
- 主題可以被分為若干個分區(qū)。

主題和分區(qū)
1.2.4 生產(chǎn)者消費者
- 會有一個或多個消費者共同讀取一個主題。
- 群組保證每個分區(qū)只能被一個消費者使用。

消費者
1.2.5 broker和集群
- 一個獨立的Kafka服務(wù)器被稱為broker。
- broker是集群的組成部分。每個集群都有一個broker充當了集群控制器的角色。
- 一個分區(qū)從屬于一個broker,該broker被稱為分區(qū)的首領(lǐng)。

broker
3.1 生產(chǎn)者

生產(chǎn)者
- 可以同步發(fā)送消息,也可以異步發(fā)送消息
3.5.2 使用Avro序列化
- 當負責寫消息的應(yīng)用程序使用了新的schema,負責讀消息的應(yīng)用程序可以繼續(xù)處理消息而無需任何改動。
- 如果變了,原來的get方法就會返回null。

序列化反序列化
4.1.1 消費者和消費者群組
- 多余的消費者只會被閑置。
4.1.2 消費者群組和分區(qū)再均衡
- 消費者通過向被指派為群組協(xié)調(diào)器的broker發(fā)送心跳來位置它們和群組的從屬關(guān)系以及它們對分區(qū)的所有權(quán)關(guān)系。
4.4 輪詢
while(true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecords<String, String> record : records) {
}
}
- 消費者必須持續(xù)向Kafka進行輪訓(xùn),否則會被認為已經(jīng)死亡。
4.6 提交和偏移量
- 消費者往一個叫做_consumer_offset的特殊主題發(fā)送消息,消息里包含每個分區(qū)的偏移量。

重復(fù)處理的出現(xiàn)
- 保存記錄和偏移量保證原子性,數(shù)據(jù)可以不重
5.2 控制器
- 控制器其實就是一個broker,只是還負責分區(qū)首領(lǐng)的選舉。
- 集群里第一個啟動的broker通過在zookeeper里創(chuàng)建一個臨時節(jié)點/controller讓自己稱為控制器。
- 控制器使用epoch來避免腦裂。
5.3 復(fù)制
- 每個分區(qū)都有一個首領(lǐng)副本。
- 持續(xù)請求得到的最新消息副本被稱為同步的副本。
5.4 處理請求
- broker會在它所監(jiān)聽的每一個端口上運行一個Acceptor線程,這個線程會創(chuàng)建一個連接,并把它交給Processor線程去處理。

處理請求
5.4.2 獲取請求
- Kafka使用零復(fù)制技術(shù)向客戶端發(fā)送消息,直接把消息從文件發(fā)送到網(wǎng)絡(luò)通道。
- 還沒有被足夠多副本復(fù)制的消息被認為是不安全的,如果首領(lǐng)崩潰,可能造成數(shù)據(jù)丟失。

broker延遲作出響應(yīng)
5.5.3 文件格式

普通消息和包裝消息
5.5.6 清理
- 為每個鍵保留最新值。
6.5.2 顯示提交偏移量
- 遇到可重試錯誤時,提交最后一個處理成功的偏移量,然后把還沒有處理好的消息保存到緩沖區(qū)里。
- 暫停輪詢的時間不能超過幾秒鐘。
- 實現(xiàn)僅一次最簡單最常用的方法就是把結(jié)果寫到一個支持唯一鍵的系統(tǒng)里。
7.3 Kafka Connect
- 以worker進程集群的方式運行。
- 數(shù)據(jù)源的連接器負責從源系統(tǒng)讀取數(shù)據(jù),并把數(shù)據(jù)對象提供給worker進程。
- 數(shù)據(jù)池的連接器負責從worker進程獲取數(shù)據(jù),并把它們寫入目標系統(tǒng)。
7.3.4 深入理解Connect
- 連接器決定運行多少個任務(wù)、按照任務(wù)來拆分數(shù)據(jù)復(fù)制、從worker進程獲取任務(wù)配置并將其傳遞下去。
- 任務(wù)負責將數(shù)據(jù)移入或移出Kafka。
- 源系統(tǒng)的任務(wù)對外部系統(tǒng)進行輪詢并返回一些記錄,worker進程將這些記錄發(fā)送到kafka。
- worker進程是連接器和任務(wù)的容器。負責REST API、配置管理、可靠性、高可用性、伸縮性和負載均衡。
- Connect提供了一組數(shù)據(jù)API——它們包含了數(shù)據(jù)對象和用于買描述數(shù)據(jù)的schema。
- 轉(zhuǎn)換器用于將數(shù)據(jù)保存到kafka。
https://blog.csdn.net/iqifenxia/article/details/121893983
Kafka Connect 中的連接器負責從源數(shù)據(jù)存儲(例如數(shù)據(jù)庫)獲取數(shù)據(jù),并以數(shù)據(jù)內(nèi)部表示將數(shù)據(jù)傳給轉(zhuǎn)換器。然后,Kafka Connect 的轉(zhuǎn)換器將這些源數(shù)據(jù)對象序列化到主題上。
11.1 什么是流處理
- 事件有序、不可變更數(shù)據(jù)記錄、事件流可重播
11.3 流式處理的設(shè)計模式
- 單個事件處理,map模式。
- 使用本地狀態(tài)。
- 多階段處理和重分區(qū)。

多階段 重分區(qū)
- 使用外部查找實現(xiàn)流表連接。
- 流與流的連接,基于窗口,窗口需要維護狀態(tài)。

流連接