Kafka系列4-基本概念及消费者组(Consumer Group)的理解
幾個基本概念:
? ? Kafka是一個分布式流數據系統,使用Zookeeper進行集群的管理。與其他消息系統類似,整個系統由生產者、Broker Server和消費者三部分組成,生產者和消費者由開發人員編寫,通過API連接到Broker Server進行數據操作。我們重點關注三個概念:
? ? Topic,是Kafka下消息的類別,類似于RabbitMQ中的Exchange的概念。這是邏輯上的概念,用來區分、隔離不同的消息數據,屏蔽了底層復雜的存儲方式。對于大多數人來說,在開發的時候只需要關注數據寫入到了哪個topic、從哪個topic取出數據。?
? ? Partition,是Kafka下數據存儲的基本單元,這個是物理上的概念。同一個topic的數據,會被分散的存儲到多個partition中,這些partition可以在同一臺機器上,也可以是在多臺機器上,比如下圖所示的topic就有4個partition,分散在兩臺機器上。這種方式在大多數分布式存儲中都可以見到,比如MongoDB、Elasticsearch的分片技術,其優勢在于:有利于水平擴展,避免單臺機器在磁盤空間和性能上的限制,同時可以通過復制來增加數據冗余性,提高容災能力。為了做到均勻分布,通常partition的數量通常是Broker Server數量的整數倍。
? ? Consumer Group,同樣是邏輯上的概念,是Kafka實現單播和廣播兩種消息模型的手段。同一個topic的數據,會廣播給不同的group;同一個group中的worker,只有一個worker能拿到這個數據。換句話說,對于同一個topic,每個group都可以拿到同樣的所有數據,但是數據進入group后只能被其中的一個worker消費。group內的worker可以使用多線程或多進程來實現,也可以將進程分散在多臺機器上,worker的數量通常不超過partition的數量,且二者最好保持整數倍關系,因為Kafka在設計時假定了一個partition只能被一個worker消費(同一group內)。
Broker
物理概念,指服務于Kafka的一個node。
topic
是一個邏輯概念。
MQ中的抽象概念,是一個消費標示。用于保證Producer以及Consumer能夠通過該標示進行對接。可以理解為一種Naming方式。
partition
是一個物理概念。partition會實際存儲在系統的摸個目錄。
Topic的一個子概念,一個topic可具有多個partition,但Partition一定屬于一個topic。
值得注意的是:
- 在實現上都是以每個Partition為基本實現單元的。
- 消費時,每個消費線程最多只能使用一個partition。
- 一個topic中partition的數量,就是每個user group中消費該topic的最大并行度數量。
User group
為了便于實現MQ中的多播,重復消費等引入的概念。如果ConsumerA以及ConsumerB同在一個UserGroup,那么ConsumerA消費的數據ConsumerB就無法消費了。
即:所有usergroup中的consumer使用一套offset。
Offset
Offset專指Partition以及User Group而言,記錄某個user group在某個partiton中當前已經消費到達的位置。
什么是消費者組(Consumer Group)
consumer group是kafka提供的可擴展且具有容錯性的消費者機制。既然是一個組,那么組內必然可以有多個消費者或消費者實例(consumer instance),它們共享一個公共的ID,即group ID。組內的所有消費者協調在一起來消費訂閱主題(subscribed topics)的所有分區(partition)。當然,每個分區只能由同一個消費組內的一個consumer來消費。理解consumer group記住下面這三個特性就好了:
1)consumer group下可以有一個或多個consumer instance,consumer instance可以是一個進程,也可以是一個線程
2)group.id是一個字符串,唯一標識一個consumer group
3)consumer group下訂閱的topic下的每個分區只能分配給某個group下的一個consumer(當然該分區還可以被分配給其他group)
總結
以上是生活随笔為你收集整理的Kafka系列4-基本概念及消费者组(Consumer Group)的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高端音响的死亡被大大夸大了
- 下一篇: 精益生产之改善活动的20个原则