Kafka隊列消息和發布訂閱消息


1、kafka自動創建主題
在配置文件里指定好kafka的topic之后,調用send方法會自動幫我們創建好topic,只是創建的topic默認是1個副本和1個分區的,這一般不能滿足我們的要求,所以我們還需要在kafka的${KAFKA}/config/server.properties里增加或修改以下參數:

num.partitions=3
auto.create.topics.enable=true
default.replication.factor=3

 

之后,kafka自動幫我們創建的主題都會包含3個副本和3個分區。

2、查看主題列表

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --list --zookeeper 172.16.0.2:2181/kafka

注:172.16.0.2:2181/kafka配置可以在server.properties查看

3、刪除主題
默認情況下Kafka是不允許刪除主題,如果想要刪除主題,在kafka的${KAFKA}/config/server.properties里增加以下參數:
delete.topic.enable=true

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --delete --topic mldn-topic --zookeeper 172.16.0.2:2181/kafka

一般而言,對於kafka操作建議在第一次啟動之前就做好所有得操作

4、一直強調Kafka是一個發布訂閱的消息組件,但是發現即便程序中啟動了多個消費端,但是最終也只能夠有一個消費者可以接收到發送者發送的內容,因為此時設置的分區只有一個,那么一個只能夠表示一對一關系。於是下面創建一個新的主題,該主題設置三個分區:

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --create --zookeeper 172.16.0.2:2181/kafka --replication-factor 1 --partitions 3 --topic mldn-three

假如啟動4個消費者,啟動1個生產者,此時所設置的消費者數量為3個,同時這三個消費者處於同一個組之中(props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-1") ),所以變為了三個消費者處理一個生產者的操作情況,所有消費者輪流進行處理。

5、如果此時你所設置的消費者的組ID不同,那么該消息將變為主題訂閱消息。所有的消費者將取得各自的全部內容。組不同不同消費者接收到的消息數據是相同的。

props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-1");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-2");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-3");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-4");

 

結論:如果現在設置的消費組相同,則表示屬於隊列消息,隊列消息可以容納的消費者最大為分區數量;
如果設置的消費組不同,則表示主題訂閱消息,那么訂閱者可以有無數多個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM