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

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)。
流連接
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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