解决kafka集群由于默认的__consumer_offsets这个topic的默认的副本数为1而存在的单点故障问题
抛出问题:
__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,来解决这个问题。下面是一些记录。
说明:如果你的__consumer_offsets这个topic已经被创建了,而且只存在一台broker上,如果你直接使用命令删除这个topic是会报错了,提示这是kafka内置的topic,禁止删除。可以在zookeeper中删除(我是使用ZooInspector这个客户端连上zookeeper,删除和__consumer_offsets这个topic有关的目录或节点)。
然后就是修改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,我们希望每台机器上都有一个副本,从而保证分区的高可用)。
下面是第二台Broker的server.properties文件的配置:
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文件的配置:
来源:oschina
链接:https://my.oschina.net/u/3611008/blog/1830965