kafka 簡介
什麼是Kafka?
KafKa是一款由 Apache 軟體基金會開源,使用 Scala 編寫的一個 高吞吐 分散式
釋出 - 訂閱 訊息系統 和一個強大的佇列,可以處理大量的資料,並使您能夠將訊息從一個端點傳遞到另一個端點。
Kafka適合 離線 和 線上 訊息消費。 Kafka訊息保留在磁碟上,並在群集內複製以防止資料丟失。 Kafka構建在ZooKeeper同步服務之上。 它與Apache Spark Streaming 非常好地整合,用於實時流式資料分析。
概念介紹
Broker
Kafka叢集包含一個或多個伺服器,這種伺服器被稱為 brokerProducer
負責釋出訊息到 Kafka broker,在傳送訊息之前,會對訊息進行分類,即Topic。Topic
每條釋出到 Kafka 叢集的訊息都有一個主題,這個主題被稱為Topic。通過對訊息指定主題可以將訊息分類(物理上不同 Topic 的訊息分開儲存,邏輯上一個 Topic 的訊息雖然儲存於一個或多個broker 上 但使用者只需指定訊息的 Topic 即可生產或消費資料而不必關心資料存於何處)Partition
Partition是物理上的概念,每個Topic包含一個或多個PartitionConsumer
訊息消費者,向Kafka broker讀取訊息的客戶端。通過對訊息指定主題可以將訊息分類,消費者可以只關注自己需要的Topic中的訊息Consumer Group
每個Consumer屬於一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name則屬於預設的group)
訊息傳輸流程
上圖展示了兩個 producer 傳送了分類為 topic1 的訊息,另外一個 producer 傳送了 topic2 的訊息。
從上圖中就可以看出同一個 Topic 下的消費者和生產者的數量並不是對應的。
kafka 伺服器訊息儲存策略
談到kafka的儲存,就不得不提到分割槽,即partitions,建立一個topic時,同時可以指定分割槽數目,分割槽數越多,其吞吐量也越大,但是需要的資源也越多,同時也會導致更高的不可用性,kafka在接收到生產者傳送的訊息之後,會根據均衡策略將訊息儲存到不同的分割槽中。
在每個分割槽中,訊息以順序儲存,最晚接收的的訊息會最後被消費。
生產者在向kafka叢集傳送訊息的時候,可以通過指定分割槽來傳送到指定的分割槽中。
也可以通過指定均衡策略來將訊息傳送到不同的分割槽中。
如果不指定,就會採用預設的隨機均衡策略,將訊息隨機的儲存到不同的分割槽中。
與 consumer 的互動
在消費者消費訊息時,kafka使用 offset 來記錄當前消費的位置。
在kafka的設計中,可以有多個不同的group來同時消費同一個topic下的訊息,如圖,我們有兩個不同的group同時消費,他們的的消費的記錄位置offset各不專案,不互相干擾。
對於一個group而言,消費者的數量不應該多餘分割槽的數量,因為在一個group中,每個分割槽至多隻能繫結到一個消費者上,即一個消費者可以消費多個分割槽,一個分割槽只能給一個消費者消費
因此,若一個group中的消費者數量大於分割槽數量的話,多餘的消費者將不會收到任何訊息。
相關文章
- Kafka簡介Kafka
- kafka之一:kafka簡介Kafka
- Kafka 簡介 & 整合 SpringBootKafkaSpring Boot
- Apache-Kafka簡介ApacheKafka
- 事件流處理 (ESP) 與 Kafka 簡介事件Kafka
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- 一、kafka 介紹 && kafka-clientKafkaclient
- Strimzi Kafka Bridge(橋接)實戰之一:簡介和部署Kafka橋接
- Azkarra Streams簡介:Apache Kafka Streams的第一個微框架ApacheKafka框架
- Kafka簡介、基本原理、執行流程與使用場景Kafka
- Sentry 監控 - Snuba 資料中臺架構簡介(Kafka+Clickhouse)架構Kafka
- Kafka詳細介紹Kafka
- Kafka簡單入門Kafka
- 訊息中介軟體Kafka+Zookeeper叢集簡介、部署和實踐Kafka
- KAFKA介紹(分散式架構)Kafka分散式架構
- Kafka中的segment的介紹Kafka
- Kafka應用實戰——Kafka安裝及簡單使用Kafka
- kafka入門:簡介、使用場景、設計原理、主要配置及叢集搭建(轉)Kafka
- 簡介
- Kafka的原理介紹及實踐Kafka
- Jira使用簡介 HP ALM使用簡介
- BookKeeper 介紹(1)--簡介
- loadsh簡介
- Knative 簡介
- Javascript 簡介JavaScript
- JanusGraph -- 簡介
- Linux簡介Linux
- CSS 簡介CSS
- 反射簡介反射
- CSS簡介CSS
- JUC簡介
- sass簡介
- APIGateway 簡介APIGateway
- Feign簡介
- Django簡介Django
- Virgilio 簡介
- 簡介JSXJS
- LVM : 簡介LVM