解決默認的__consumer_offsets這個topic默認副本數爲1而存在的單點故障問題

解決kafka集羣因爲默認的__consumer_offsets這個topic的默認的副本數爲1而存在的單點故障問題

拋出問題: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

相關文章
相關標籤/搜索