拋出問題:html
__consumer_offsets這個topic是由kafka自動建立的,默認50個,可是都存在一臺kafka服務器上,這是否是就存在很明顯的單點故障? 經測試,若是將存儲consumer_offsets的這臺機器kill掉,全部的消費者都中止消費了。請問這個問題是怎麼解決的呢?
緣由分析:服務器
因爲__consumer_offsets這個用於存儲offset的分區是由kafka服務器默認自動建立的,那麼它在建立該分區的時候,分區數和副本數的依據是什麼? 分區數是固定的50,這個沒什麼可懷疑的,副本數呢?應該是一個默認值1,依據是,若是咱們沒有在server.properties文件中指定topic分區的副本數的話,它的默認值就是1。
__consumer_offsets是一個很是重要的topic,咱們怎麼能容許它只有一個副本呢?這樣就存在單點故障,也就是若是該分區所在的集羣宕機了的話, 咱們的消費者就沒法正常消費數據了。
我在筆記本上搭建了kafka集羣,共3個Broker,來解決這個問題。下面是一些記錄。socket
說明:若是你的__consumer_offsets這個topic已經被建立了,並且只存在一臺broker上,若是你直接使用命令刪除這個topic是會報錯了,提示這是kafka內置的topic,禁止刪除。能夠在zookeeper中刪除(我是使用ZooInspector這個客戶端連上zookeeper,刪除和__consumer_offsets這個topic有關的目錄或節點)。oop
而後就是修改kafka的核心配置文件server.properties,下面是第一臺Broker的配置文件:測試
1 [root@hadoop01 kafka-logs]# cat /opt/kafka/config/server.properties 2 broker.id=0 3 listeners=PLAINTEXT://:9092 4 port=9092 5 num.network.threads=3 6 num.io.threads=8 7 socket.send.buffer.bytes=102400 8 socket.receive.buffer.bytes=102400 9 socket.request.max.bytes=104857600 10 log.dirs=/opt/logs/kafka-logs 11 num.partitions=3 12 num.recovery.threads.per.data.dir=1 13 log.retention.hours=168 14 log.segment.bytes=536870912 15 log.retention.check.interval.ms=300000 16 zookeeper.connect=192.168.71.11:2181,192.168.71.12:2181,192.168.71.13:2181 17 izookeeper.connection.timeout.ms=6000 18 delete.topic.enable=true 19 host.name=192.168.71.11 20 advertised.host.name=192.168.71.11 21 auto.create.topics.enable=true 22 default.replication.factor=3
在上面的配置中,我開啓了自動建立topic,並指定了topic的分區數爲3,副本數爲3(由於我有3臺Broker,咱們但願每臺機器上都有一個副本,從而保證分區的高可用)。spa
下面是第二臺Broker的server.properties文件的配置:.net
1 [root@hadoop02 kafka-logs]# cat /opt/kafka/config/server.properties 2 broker.id=1 3 listeners=PLAINTEXT://:9092 4 port=9092 5 num.network.threads=3 6 num.io.threads=8 7 socket.send.buffer.bytes=102400 8 socket.receive.buffer.bytes=102400 9 socket.request.max.bytes=104857600 10 log.dirs=/opt/logs/kafka-logs 11 num.partitions=3 12 num.recovery.threads.per.data.dir=1 13 log.retention.hours=168 14 log.segment.bytes=536870912 15 log.retention.check.interval.ms=300000 16 zookeeper.connect=192.168.71.11:2181,192.168.71.12:2181,192.168.71.13:2181 17 izookeeper.connection.timeout.ms=6000 18 delete.topic.enable=true 19 host.name=192.168.71.12 20 advertised.host.name=192.168.71.12 21 auto.create.topics.enable=true 22 default.replication.factor=3 23 [root@hadoop02 kafka-logs]#
第3臺Broker的server.properties文件的配置:server