天天看點

Kafka隊列消息和釋出訂閱消息

1、kafka自動建立主題

在配置檔案裡指定好kafka的topic之後,調用send方法會自動幫我們建立好topic,隻是建立的topic預設是1個副本和1個分區的,這一般不能滿足我們的要求,是以我們還需要在kafka的${KAFKA}/config/server.properties裡增加或修改以下參數:

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

2、檢視主題清單

注: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是一個釋出訂閱的消息元件,但是發現即便程式中啟動了多個消費端,但是最終也隻能夠有一個消費者可以接收到發送者發送的内容,因為此時設定的分區隻有一個,那麼一個隻能夠表示一對一關系。于是下面建立一個新的主題,該主題設定三個分區:

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

5、如果此時你所設定的消費者的組ID不同,那麼該消息将變為主題訂閱消息。所有的消費者将取得各自的全部内容。組不同不同消費者接收到的消息資料是相同的。

結論:如果現在設定的消費組相同,則表示屬于隊列消息,隊列消息可以容納的消費者最大為分區數量;

如果設定的消費組不同,則表示主題訂閱消息,那麼訂閱者可以有無數多個。