Kafka基本知識回顧及複製

来源:https://www.cnblogs.com/cjsblog/archive/2018/02/12/8445054.html
-Advertisement-
Play Games

Producers發佈記錄到集群,集群維護這些記錄並且將記錄分發給Consumers。 在Kafka中,最關鍵的抽象是topic。Producers發佈記錄到一個topic,Consumers訂閱一個或多個topic。Topic是一個分片的寫優先的log。Producers追加記錄到這些logs,C ...


Producers發佈記錄到集群,集群維護這些記錄並且將記錄分發給Consumers。

在Kafka中,最關鍵的抽象是topic。Producers發佈記錄到一個topic,Consumers訂閱一個或多個topic。Topic是一個分片的寫優先的log。Producers追加記錄到這些logs,Consumers訂閱logs的改變。每條記錄都是一個key/value對。根據key來指定記錄到哪個日誌分區(除非發佈者直接指定分區)。

下麵是一個簡單的例子,在這個例子中,有一個生產者和一個消費者,它們讀寫一個有兩個分區的topic:

這張圖顯示了一個生產者進程追加記錄到兩個分區日誌。日誌中的每條記錄有有一個offset。Consumer用這個offset來描述它在每個日誌中的位置。

Partitions是分佈在集群的機器之上的。(PS:一堆機器組成一個集群,集群之上是topic,而topic是由多個partitions組成)

不想其它的消息系統那樣,Kafka的log總是持久化的。消息在到達kafka的時候立刻被寫到文件系統。消息被消費以後不會被刪除,至於保留多長時間取決於配置。這使得kafka能夠支持高效的發佈訂閱,因為不管有多少消費者它們都共用一個log。

為了容錯,kafka也複製logs到多個伺服器。

當Producers發佈一個消息的時候,它會得到一個確認,這個確認中包含了這條記錄的offset。第一個被髮布到分區的記錄的offset是0,第二條記錄是1,以此遞增。Consumers從指定offset處開始消費,並且定期保存它們的位置在log中:保存這個offset是為了以防萬一消費者實例崩潰了,另一個實例可以繼續從這個位置開始消費。

Replication

Kafka根據配置的伺服器數量來複制每個分區的日誌。預設情況下,kafka是開啟複製的,事實上,未複製的主題和複製的主題是一樣的,只不過它們的複製因數是1。

複製是以分區為單位的(The unit of replication is the topic partition)。Kafka中,每個分區都有一個leader和0個或多個followers。副本的總數量包括leader。所有的讀和寫都指向分區的leader。通常,分區的數量比broker要多,而且分區分佈在broker中。

Followers就像正常的kafka消費者那樣從leader那裡消費消息,並且把它們應用到自己的log中。

想大多數分散式系統自動處理失敗那樣,關於一個節點"alive"需要有一個明確的定義,kafka中結點存活有兩個條件:

1、一個節點必須能夠在Zookeeper上維護它自己的會話(通過Zookeeper的心跳機制)

2、如果這個節點是一個slave,那麼它必須複製leader上發送的寫操作,而且不能落後太多

為了避免同"alive"和"fail"混淆,我們把滿足這兩個條件的結點狀態稱之為"in sync"。leader維持對"in sync"結點的跟蹤。如果一個follower死了,或者卡了,或者失敗了,leader會將其從同步副本列表中刪除。

我們現在可以更明確的定義,當這個分區的所有in sync副本都應用了這個log時一個消息才能算是提交完成。只有提交完成的消息才能分發給消費者。這就意味著消費者不需要擔心會看到一個可能丟失的消息。另一方面,生產者有一些選項可以控制到底是等待這個消息提交完成還是不等待,當然這取決於它們在持久化和延遲之間的這種的性能。這個性能有生產者的acks設置來控制。註意,topic關於in-sync副本有一個設置叫"minimum number",當生產者請求一個已經被寫到所有in-sync副本上的消息的確認的時候會檢查這個設置。如果生產者確認請求不那麼嚴格,那麼這個消息仍然可以被提交,被消費,即使in-sync副本的數量比minimum小。

Kafka保證在任何時候,只有有一個in sync副本還活著,已經提交的消息就不會丟失。

We can now more precisely define that a message is considered committed when all in sync replicas for that partition have applied it to their log. Only committed messages are ever given out to the consumer. This means that the consumer need not worry about potentially seeing a message that could be lost if the leader fails. Producers, on the other hand, have the option of either waiting for the message to be committed or not, depending on their preference for tradeoff between latency and durability. This preference is controlled by the acks setting that the producer uses. Note that topics have a setting for the "minimum number" of in-sync replicas that is checked when the producer requests acknowledgment that a message has been written to the full set of in-sync replicas. If a less stringent acknowledgement is requested by the producer, then the message can be committed, and consumed, even if the number of in-sync replicas is lower than the minimum (e.g. it can be as low as just the leader).

The guarantee that Kafka offers is that a committed message will not be lost, as long as there is at least one in sync replica alive, at all times.

 

參考 

http://kafka.apache.org/documentation/#design

https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習了輸入cin的使用 ...
  • 剛剛開學學習c++,寫了第一個c++程式。代碼如下: ...
  • 題庫: 題庫1 ...
  • 用了tornado真的是比較舒服,很多事都為你做好了。 但也有不令人滿意的地方——對於我這個潔癖來說,自動給我的控制台列印不受我控制的信息是不能忍受的。 連接到一個新的地方,如果失敗,tornado會使用python的日誌像控制台寫錯誤。 為了消滅這個錯誤,並且不丟失這個記錄,轉移到文件,可以這樣做 ...
  • 前段時間因為抓取圖片的那個腳本,遇到網路波動就會自己報錯停止運行,近幾日一直在尋找解決方案,昨日突發奇想用以前的知識解決了問題 代碼如下 大神勿噴 ...
  • (一) 前言 Web應用以及包含超文本標記語言(HTML)、層疊樣式表(CSS)、JS腳本的WEB頁面,基於用戶的操作(例如點擊提交按鈕),瀏覽器向WEB伺服器發送請求,WEB伺服器響應請求,返回給瀏覽器HTML及相關的JS、CSS、圖片等資源,瀏覽器使用這些資源生成WEB頁面,其中包含WEB各種視 ...
  • 後端開發:1、高級java軟體架構師實戰培訓視頻教程2、大型SpringMVC,Mybatis,Redis,Solr,Nginx,SSM分散式電商項目視頻教程3、Spark Streaming實時流處理項目實戰4、Java校招面試 Google面試官親授5、Java開發企業級許可權管理系統6、Java ...
  • 記憶體限制:256 MiB時間限制:500 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: hzwer 記憶體限制:256 MiB時間限制:500 ms標準輸入輸出 題目類型:傳統評測方式:文本比較 上傳者: hzwer 提交提交記錄統計討論測試數據 題目描述 給出一個長為 nnn 的數列 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...