一. topic的from-beginning
參數
-
啓動zookeeper和kafka
bin/zkServer.sh start-foreground bin/kafka-server-start.sh config/server.properties
-
創建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic testtopic
-
啓動producer和兩個consumer
啓動producer
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testtopic
打開兩個命令行窗口啓動兩個consumer
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic --from-beginning
-
在producer中輸入一些字符,可以在consumer中看到已經獲取到這些字符。
producer
兩個consumer中展示收到的信息
-
打開第三個命令行窗口,並創建一個新的consumer,不過這次的命令和之前的不太一樣:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic
可以看到,這次在創建consumer時的參數沒有--from-beginning
。同時,窗口中並沒有輸出任何信息。
- 此時在producer中輸入新的信息,查看3個consumer的情況:
在producer中新輸入will go to London
前兩個consumer中完整顯示所有信息
第三個consumer只顯示了最新產生的will go to London
以上例子可以印證之前的概念:
- 多個消費者可以訂閱同一個topic。
- 參數
--from-beginning
的作用是使consumer從kafka最早的消息開始消費。
二. 消費者組
在這之前先關閉之前創建的3個consumer窗口。並使用以下命令分別創建2個新的consumer,這次的命令與之前的也稍有不同。
- 一個消費者只能屬於一個消費者組
- 消費者組訂閱的topic只能被其中的一個消費者消費
- 不同消費者組中的消費者可以消費同一個topic
- 實例
新開兩個命令行窗口,創建2個新的consumer:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic --group testgroup
在producer窗口中輸入信息,會發現只有一個consumer窗口中有輸出。
關閉剛纔創建的2個consumer,使用以下2個命令創建2個新的consumer:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic --group testgroup1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic --group testgroup2
訂閱testtopic
的2個consumer分別屬於不同的消費者組testgroup1
和testgroup2
,因此2個窗口中都會顯示producer產生的消息。