kafka筆記

創建主題和修改主題,分區:

# sh  kafka-topics.sh --zookeeper localhost:2181 --alter --topic  topic02  --partitions 4

 

 

查看kafka特定topic的詳情,使用--topic與--describe參數

# sh kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic topic02 --describe 

 

查topic

# bin/kafka-topics.sh --list --zookeeper zk:2181

  

 

分區需要手動添加

一個topic 可以配置幾個partition,produce發送的消息分發到不同的partition中,consumer接受數據的時候是按照group來接受,kafka確保每個partition只能同一個group中的同一個consumer消費,如果想要重複消費,那麼需要其他的組來消費。Zookeerper中保存這每個topic下的每個partition在每個group中消費的offset 
新版kafka把這個offsert保存到了一個__consumer_offsert的topic下 
這個__consumer_offsert 有50個分區,通過將group的id哈希值%50的值來確定要保存到那一個分區.  這樣也是爲了考慮到zookeeper不擅長大量讀寫的原因。
所以,如果要一個group用幾個consumer來同時讀取的話,需要多線程來讀取,一個線程相當於一個consumer實例。當consumer的數量大於分區的數量的時候,有的consumer線程會讀取不到數據。 
假設一個topic test 被groupA消費了,現在啓動另外一個新的groupB來消費test,默認test-groupB的offset不是0,而是沒有新建立,除非當test有數據的時候,groupB會收到該數據,該條數據也是第一條數據,groupB的offset也是剛初始化的ofsert, 除非用顯式的用–from-beginnging 來獲取從0開始數據 

 

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