Kafka權(quán)威指南 簡(jiǎn)要記錄

1.2.1 消息和批次

  • Kafka的數(shù)據(jù)單元被稱(chēng)為消息。
  • 消息被分批次寫(xiě)入kafka,批次就是一組消息,這些消息屬于同一個(gè)主題和分區(qū)。

1.2.3 主題和分區(qū)

  • Kafka消息通過(guò)主題進(jìn)行分類(lèi)。
  • 主題可以被分為若干個(gè)分區(qū)。
主題和分區(qū)

1.2.4 生產(chǎn)者消費(fèi)者

  • 會(huì)有一個(gè)或多個(gè)消費(fèi)者共同讀取一個(gè)主題。
  • 群組保證每個(gè)分區(qū)只能被一個(gè)消費(fèi)者使用。
消費(fèi)者

1.2.5 broker和集群

  • 一個(gè)獨(dú)立的Kafka服務(wù)器被稱(chēng)為broker。
  • broker是集群的組成部分。每個(gè)集群都有一個(gè)broker充當(dāng)了集群控制器的角色。
  • 一個(gè)分區(qū)從屬于一個(gè)broker,該broker被稱(chēng)為分區(qū)的首領(lǐng)。
broker

3.1 生產(chǎn)者

生產(chǎn)者
  • 可以同步發(fā)送消息,也可以異步發(fā)送消息

3.5.2 使用Avro序列化

  • 當(dāng)負(fù)責(zé)寫(xiě)消息的應(yīng)用程序使用了新的schema,負(fù)責(zé)讀消息的應(yīng)用程序可以繼續(xù)處理消息而無(wú)需任何改動(dòng)。
  • 如果變了,原來(lái)的get方法就會(huì)返回null。
序列化反序列化

4.1.1 消費(fèi)者和消費(fèi)者群組

  • 多余的消費(fèi)者只會(huì)被閑置。

4.1.2 消費(fèi)者群組和分區(qū)再均衡

  • 消費(fèi)者通過(guò)向被指派為群組協(xié)調(diào)器的broker發(fā)送心跳來(lái)位置它們和群組的從屬關(guān)系以及它們對(duì)分區(qū)的所有權(quán)關(guān)系。

4.4 輪詢(xún)

while(true) {
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecords<String, String> record : records) {

    }
}
  • 消費(fèi)者必須持續(xù)向Kafka進(jìn)行輪訓(xùn),否則會(huì)被認(rèn)為已經(jīng)死亡。

4.6 提交和偏移量

  • 消費(fèi)者往一個(gè)叫做_consumer_offset的特殊主題發(fā)送消息,消息里包含每個(gè)分區(qū)的偏移量。
重復(fù)處理的出現(xiàn)
  • 保存記錄和偏移量保證原子性,數(shù)據(jù)可以不重

5.2 控制器

  • 控制器其實(shí)就是一個(gè)broker,只是還負(fù)責(zé)分區(qū)首領(lǐng)的選舉。
  • 集群里第一個(gè)啟動(dòng)的broker通過(guò)在zookeeper里創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)/controller讓自己稱(chēng)為控制器。
  • 控制器使用epoch來(lái)避免腦裂。

5.3 復(fù)制

  • 每個(gè)分區(qū)都有一個(gè)首領(lǐng)副本。
  • 持續(xù)請(qǐng)求得到的最新消息副本被稱(chēng)為同步的副本。

5.4 處理請(qǐng)求

  • broker會(huì)在它所監(jiān)聽(tīng)的每一個(gè)端口上運(yùn)行一個(gè)Acceptor線(xiàn)程,這個(gè)線(xiàn)程會(huì)創(chuàng)建一個(gè)連接,并把它交給Processor線(xiàn)程去處理。
處理請(qǐng)求

5.4.2 獲取請(qǐng)求

  • Kafka使用零復(fù)制技術(shù)向客戶(hù)端發(fā)送消息,直接把消息從文件發(fā)送到網(wǎng)絡(luò)通道。
  • 還沒(méi)有被足夠多副本復(fù)制的消息被認(rèn)為是不安全的,如果首領(lǐng)崩潰,可能造成數(shù)據(jù)丟失。
broker延遲作出響應(yīng)

5.5.3 文件格式

普通消息和包裝消息

5.5.6 清理

  • 為每個(gè)鍵保留最新值。

6.5.2 顯示提交偏移量

  • 遇到可重試錯(cuò)誤時(shí),提交最后一個(gè)處理成功的偏移量,然后把還沒(méi)有處理好的消息保存到緩沖區(qū)里。
  • 暫停輪詢(xún)的時(shí)間不能超過(guò)幾秒鐘。
  • 實(shí)現(xiàn)僅一次最簡(jiǎn)單最常用的方法就是把結(jié)果寫(xiě)到一個(gè)支持唯一鍵的系統(tǒng)里。

7.3 Kafka Connect

  • 以worker進(jìn)程集群的方式運(yùn)行。
  • 數(shù)據(jù)源的連接器負(fù)責(zé)從源系統(tǒng)讀取數(shù)據(jù),并把數(shù)據(jù)對(duì)象提供給worker進(jìn)程。
  • 數(shù)據(jù)池的連接器負(fù)責(zé)從worker進(jìn)程獲取數(shù)據(jù),并把它們寫(xiě)入目標(biāo)系統(tǒng)。

7.3.4 深入理解Connect

  • 連接器決定運(yùn)行多少個(gè)任務(wù)、按照任務(wù)來(lái)拆分?jǐn)?shù)據(jù)復(fù)制、從worker進(jìn)程獲取任務(wù)配置并將其傳遞下去。
  • 任務(wù)負(fù)責(zé)將數(shù)據(jù)移入或移出Kafka。
  • 源系統(tǒng)的任務(wù)對(duì)外部系統(tǒng)進(jìn)行輪詢(xún)并返回一些記錄,worker進(jìn)程將這些記錄發(fā)送到kafka。
  • worker進(jìn)程是連接器和任務(wù)的容器。負(fù)責(zé)REST API、配置管理、可靠性、高可用性、伸縮性和負(fù)載均衡。
  • Connect提供了一組數(shù)據(jù)API——它們包含了數(shù)據(jù)對(duì)象和用于買(mǎi)描述數(shù)據(jù)的schema。
  • 轉(zhuǎn)換器用于將數(shù)據(jù)保存到kafka。

https://blog.csdn.net/iqifenxia/article/details/121893983
Kafka Connect 中的連接器負(fù)責(zé)從源數(shù)據(jù)存儲(chǔ)(例如數(shù)據(jù)庫(kù))獲取數(shù)據(jù),并以數(shù)據(jù)內(nèi)部表示將數(shù)據(jù)傳給轉(zhuǎn)換器。然后,Kafka Connect 的轉(zhuǎn)換器將這些源數(shù)據(jù)對(duì)象序列化到主題上。

11.1 什么是流處理

  • 事件有序、不可變更數(shù)據(jù)記錄、事件流可重播

11.3 流式處理的設(shè)計(jì)模式

  • 單個(gè)事件處理,map模式。
  • 使用本地狀態(tài)。
  • 多階段處理和重分區(qū)。
多階段 重分區(qū)
  • 使用外部查找實(shí)現(xiàn)流表連接。
  • 流與流的連接,基于窗口,窗口需要維護(hù)狀態(tài)。
流連接
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容