Apache Kafka 是什么

Kafka 是基于發(fā)布與訂閱的消息系統(tǒng)。Kafka 是一個(gè)分布式的,可分區(qū)的,冗余備份的持久性的日志服務(wù)。它主要用于處理活躍的流式數(shù)據(jù)。

Kafka 的主要特點(diǎn)

  • 1、同時(shí)為發(fā)布和訂閱提供高吞吐量。據(jù)了解,Kafka 每秒可以生產(chǎn)約 25 萬(wàn)消息(50MB),每秒處理 55 萬(wàn)消息(110MB)。
  • 2、可進(jìn)行持久化操作。將消息持久化到磁盤,因此可用于批量消費(fèi),例如 ETL ,以及實(shí)時(shí)應(yīng)用程序。通過(guò)將數(shù)據(jù)持久化到硬盤,以及replication ,可以防止數(shù)據(jù)丟失。
  • 3、分布式系統(tǒng),易于向外擴(kuò)展。所有的 Producer、Broker 和Consumer 都會(huì)有多個(gè),均為分布式的。并且,無(wú)需停機(jī)即可擴(kuò)展機(jī)器。
  • 4、消息被處理的狀態(tài)是在 Consumer 端維護(hù),而不是由 Broker 端維護(hù)。當(dāng)失敗時(shí),能自動(dòng)平衡。

Kafka 的設(shè)計(jì)要點(diǎn)

1.吞吐量:

  • 1、數(shù)據(jù)磁盤持久化:消息不在內(nèi)存中 Cache ,直接寫入到磁盤,充分利用磁盤的順序讀寫性能。
  • 2、zero-copy:減少 IO 操作步驟
  • 3、數(shù)據(jù)批量發(fā)送
  • 4、數(shù)據(jù)壓縮
  • 5、Topic 劃分為多個(gè) Partition ,提高并行度。
數(shù)據(jù)在磁盤上存取代價(jià)為 O(1):Kafka以 Topic 來(lái)進(jìn)行消息管理,每個(gè) Topic 包含多個(gè)Partition
,每個(gè) Partition 對(duì)應(yīng)一個(gè)邏輯 log ,有多個(gè) segment 文件組成。每個(gè) segment 中存儲(chǔ)多條消
息,消息 id 由其邏輯位置決定,即從消息 id 可直接定位到消息的存儲(chǔ)位置,避免 id 到位置的
額外映射。每個(gè) Partition 在內(nèi)存中對(duì)應(yīng)一個(gè) index ,記錄每個(gè) segment 中的第一條消息移。

發(fā)布者發(fā)到某個(gè) Topic 的消息會(huì)被均勻的分布到多個(gè) Partition 上(隨機(jī)或根據(jù)用戶指定的回調(diào)
函數(shù)進(jìn)行分布),Broker 收到發(fā)布消息往對(duì)應(yīng) Partition 的最后一個(gè) segment 上添加該消息。
 當(dāng)某個(gè) segment上 的消息條數(shù)達(dá)到配置值或消息發(fā)布時(shí)間超過(guò)閾值時(shí),segment上 的消息會(huì)
被 flush 到磁盤,只有 flush 到磁盤上的消息訂閱者才能訂閱到,segment 達(dá)到一定的大小后
將不會(huì)再往該 segment 寫數(shù)據(jù),Broker 會(huì)創(chuàng)建新的 segment 文件。

2.負(fù)載均衡

  • 1、Producer 根據(jù)用戶指定的算法,將消息發(fā)送到指定的 Partition 中。
  • 2、Topic 存在多個(gè) Partition ,每個(gè) Partition 有自己的replica ,每個(gè) replica 分布在不同的 Broker 節(jié)點(diǎn)上。多個(gè)Partition 需要選取出 Leader partition ,Leader Partition 負(fù)責(zé)讀寫,并由 Zookeeper 負(fù)責(zé) fail over 。
  • 3、相同 Topic 的多個(gè) Partition 會(huì)分配給不同的 Consumer 進(jìn)行拉取消息,進(jìn)行消費(fèi)。

3.拉取系統(tǒng)
由于 Kafka Broker 會(huì)持久化數(shù)據(jù),Broker 沒(méi)有內(nèi)存壓力,因此, Consumer 非常適合采取 pull 的方式消費(fèi)數(shù)據(jù),具有以下幾點(diǎn)好處:

  • 1、簡(jiǎn)化 Kafka 設(shè)計(jì)。
  • 2、Consumer 根據(jù)消費(fèi)能力自主控制消息拉取速度。
  • 3、Consumer 根據(jù)自身情況自主選擇消費(fèi)模式,例如批量,重復(fù)消費(fèi),從尾端開始消費(fèi)等。

4.可擴(kuò)展性:通過(guò) Zookeeper 管理 Broker 與 Consumer 的動(dòng)態(tài)加入與離開。

  • 1、當(dāng)需要增加 Broker 節(jié)點(diǎn)時(shí),新增的 Broker 會(huì)向 Zookeeper 注冊(cè),而 Producer 及 Consumer 會(huì)根據(jù)注冊(cè)在 Zookeeper 上的 watcher 感知這些變化,并及時(shí)作出調(diào)整。
  • 2、當(dāng)新增和刪除 Consumer 節(jié)點(diǎn)時(shí),相同 Topic 的多個(gè) Partition 會(huì)分配給剩余的 Consumer 們。
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一.什么是kafka Kafka是一種消息中件間在了解kafka之前,我們先來(lái)了解一下什么是消息中間件消息中間件是...
    經(jīng)綸先生閱讀 1,214評(píng)論 0 1
  • 1. 簡(jiǎn)介 Kafka 是linkedin 公司用于日志處理的分布式消息隊(duì)列,同時(shí)支持離線和在線日志處理。kafk...
    HAO延WEI閱讀 389評(píng)論 1 1
  • 一、消息隊(duì)列Message Queue 兩種模式 點(diǎn)對(duì)點(diǎn)模式點(diǎn)對(duì)點(diǎn)模式是一個(gè)基于拉取或輪詢的消息傳送模型,由消費(fèi)者...
    上杉丶零閱讀 4,102評(píng)論 3 51
  • 摘要目前來(lái)說(shuō)市面上可以選擇的消息隊(duì)列非常多,像activemq,rabbitmq,zeromq已經(jīng)被大多數(shù)人耳熟能...
    ThoughtWorks閱讀 553評(píng)論 0 6
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒(méi)有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,480評(píng)論 0 13

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