kafka安裝使用教程

下載地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.2/kafka_2.11-1.0.2.tgz
文檔地址:http://kafka.apache.org/10/documentation.html#quickstart
下載後配置,暫時不配

開啓服務

開啓zookeeper

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)

開啓kafka服務

> bin/kafka-server-start.sh config/server.properties
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

創建topic(主題/隊列)

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看主題列表

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

生產者推送消息

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

消費者消費消息

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

生產消費的合理配

使用3個producer同時對一個topic寫入數據,其中使用2個group組來對數據進行讀取,其中topic中的partitions定爲2。在每個group下又創建2個consumer進行消費數據。

在項目剛開始,我只在topic中設置了一個partitions就是隻有一個消費者來消費我傳入的數據,但是由於項目的變化,消費的太慢寫入的太快,給kafka帶來了數據堆積,於是我又加了一個consumer來進行數據的消費,由於剛開始沒有給group創建ID使用默認ID,但是發現我每個consumer消費的數據是相同的,並沒有達到我的需求。kafka的一條數據會被我的2個consumer同時消費,消費2次,並沒有增加效率,而且還給系統帶來負擔,後臺查詢官網API發現group中是有ID的,如果沒有創建就自動使用默認ID這個一定要注意。其次是一個partition對應一個consumer,如果consumer的數量大於Topic中partition的數量就會有的consumer接不到數據(設置ID不使用默認ID的情況下)。 
爲了滿足的我業務需求我做了一下調整: 
增加topic中partition中的數量。 
相應增加consumer的數量 consumer的數量<=partition的數量 
這裏需要強調的是不同的group組之間不做任何影響,就如同我一個group做python機器學習。另一個做Spark計算,這2個group的數據都是相互不影響的,這也是kafka很好用的東西。 
--------------------- 
作者:zhaishujie 
來源:CSDN 
原文:https://blog.csdn.net/zhaishujie/article/details/71713794 
 Consumer Group,同樣是邏輯上的概念,是Kafka實現單播和廣播兩種消息模型的手段。同一個topic的數據,會廣播給不同的group;同一個group中的worker,只有一個worker能拿到這個數據。換句話說,對於同一個topic,每個group都可以拿到同樣的所有數據,但是數據進入group後只能被其中的一個worker消費。group內的worker可以使用多線程或多進程來實現,也可以將進程分散在多臺機器上,worker的數量通常不超過partition的數量,且二者最好保持整數倍關係,因爲Kafka在設計時假定了一個partition只能被一個worker消費(同一group內)。
 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中當前已經消費到達的位置。
----------------- 
作者:kuluzs 
來源:CSDN 
原文:https://blog.csdn.net/kuluzs/article/details/71171537 

自己的筆記:當消費得太慢時,要把topic分區和增加消費者,consumer的數量<=partition的數量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章