kafka學習(二)-------- 什麼是Kafka

獨孤風發表於2019-07-22

通過Kafka的快速入門 https://www.cnblogs.com/tree1123/p/11150927.html

能瞭解到Kafka的基本部署,使用,但他和其他的訊息中介軟體有什麼不同呢?

Kafka的基本原理,術語,版本等等都是怎麼樣的?到底什麼是Kafka呢?

一、Kafka簡介

http://kafka.apache.org/intro

2011年,LinkIn開源, November 1, 2017 1.0版本釋出 July 30, 2018 2.0版本釋出

參考官網的圖:

Kafka®用於構建實時資料管道和流式應用程式。它具有水平可擴充套件性、容錯性、速度極快,並在數千家公司投入生產。

kafka官網最新的定義:Apache Kafka® is a distributed streaming platform

也就是分散式流式平臺。

介紹:

三個特點:

  • Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
  • Store streams of records in a fault-tolerant durable way.
  • Process streams of records as they occur.

訊息 持久化 流處理

兩類應用:

  • Building real-time streaming data pipelines that reliably get data between systems or applications

  • Building real-time streaming applications that transform or react to the streams of data

    實時流資料管道 實時流應用程式

    幾個概念

    • Kafka is run as a cluster on one or more servers that can span multiple datacenters.

    • The Kafka cluster stores streams of records in categories called topics.

    • Each record consists of a key, a value, and a timestamp

      叢集 topic record

      四個核心api

      • The Producer API allows an application to publish a stream of records to one or more Kafka topics.
      • The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.
      • The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams.
      • The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table.

       Producer API  Consumer API  Streams API Connector API

客戶端伺服器通過tcp協議 支援多種語言

主題和日誌

一個主題可以有零個,一個或多個消費者訂閱寫入它的資料

對於每個主題,Kafka群集都維護一個分割槽日誌

每個分割槽都是一個有序的,不可變的記錄序列,不斷附加到結構化的提交日誌中。

分割槽中的記錄每個都被分配一個稱為偏移的順序ID號,它唯一地標識分割槽中的每個記錄。

Kafka叢集持久地保留所有已釋出的記錄 - 無論它們是否已被消耗 - 使用可配置的保留期。可以配置這個時間。

Kafka的效能在資料大小方面實際上是恆定的,因此長時間儲存資料不是問題。

每個消費者保留的唯一後設資料是該消費者在日誌中的偏移或位置。

這種偏移由消費者控制:通常消費者在讀取記錄時會線性地提高其偏移量,但事實上,由於消費者控制位置,它可以按照自己喜歡的任何順序消費記錄。例如,消費者可以重置為較舊的偏移量以重新處理過去的資料,或者跳到最近的記錄並從“現在”開始消費。

這使得消費者特別容易使用。

生產者:

生產者將資料釋出到他們選擇的主題。

為了負載均衡,可以選擇多個分割槽。

消費者:

消費者組

傳統的訊息佇列 釋出訂閱 都有弊端

佇列可以擴充套件但不是多使用者,釋出訂閱每條消費發給每個消費者,無法擴充套件。

但是kafka這個模式 解決了這些問題

kafka確保使用者是該分割槽的唯一讀者並按順序使用資料,由於有許多分割槽,這仍然可以

平衡許多消費者例項的負載。

作為儲存系統

作為流處理系統

二、常見使用

http://kafka.apache.org/uses

訊息

Kafka可以替代更傳統的訊息代理。訊息代理的使用有多種原因(將處理與資料生成器分離,緩衝未處理的訊息等)。與大多數訊息傳遞系統相比,Kafka具有更好的吞吐量,內建分割槽,複製和容錯功能,這使其成為大規模訊息處理應用程式的理想解決方案。

根據我們的經驗,訊息傳遞的使用通常相對較低,但可能需要較低的端到端延遲,並且通常取決於Kafka提供的強大的耐用性保證。

在這個領域,Kafka可與傳統的訊息傳遞系統(如ActiveMQ或 RabbitMQ)相媲美。

網站活動跟蹤

站點活動(頁面檢視,搜尋或使用者可能採取的其他操作)釋出到中心主題,每個活動型別包含一個主題。實時處理,實時監控以及載入到Hadoop或離線資料倉儲系統以進行離線處理和報告。

度量

Kafka通常用於運營監控資料。

日誌聚合

許多人使用Kafka作為日誌聚合解決方案的替代品。日誌聚合通常從伺服器收集物理日誌檔案,並將它們放在中央位置(可能是檔案伺服器或HDFS)進行處理。Kafka抽象出檔案的細節,並將日誌或事件資料更清晰地抽象為訊息流。

流處理

從0.10.0.0開始,這是一個輕量級但功能強大的流處理庫,名為Kafka Streams

三、官方文件-核心機制

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

簡介 使用 快速入門 都已經學習過了

生態:這裡有一些kafka的生態,各種Connector 可以直接連線資料庫 es等等 還可以連線其他的流處理 還有各種管理工具

https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem

kafka connect stream management

kafka考慮的幾個問題:

吞吐量: 用到了page cache 並不是硬碟讀寫

訊息持久化: 這個還是靠他獨特的offset設計

負載均衡:分割槽副本機制

訊息:kafka的訊息由 key value timestamp組成 訊息頭裡定義了一些壓縮 版本號的資訊

crc 版本號 屬性 時間戳 長度 key長度 key value長度 value

用的是二進位制 不用java類

topic和partition:

這是kafka最核心,也是最重要的機制,這個機制讓他區別於其他。

offset是指某一個分割槽的偏移量。

topic partition offset 這三個唯一確定一條訊息。

生產者的offset其實就是最新的offset。

消費者的offset是他自己維護的,他可以選擇分割槽最開始,最新,也可以記住他消費到哪了。

消費者數大於分割槽,就會有消費者空著。 消費者數小於分割槽,就會均衡消費。

消費者組是為了不同組的消費者可以同時消費一個分割槽的訊息。

replica

這是為了防止伺服器掛掉。

分為兩類 leader replica 和 follow replica

只有 leader replica會響應客戶端。

一旦leader replica所在的broker當機,會選出新的leader。

kafka保證一個partition的多個replica一定不會分配到同一臺broker上。

follow與leader實時同步。

ISR

in-sync replica 與leader replica保持同步的replica集合

正常時,所有的replica都在ISR中,但如果響應太慢,就會踢出ISR。之後追上來再加進來。

ISR中至少有一個replica是活著的。

ISR中所有replica都收到訊息,這個訊息才是已提交狀態。

四、版本變化

相關文章