从一次 Kafka 节点宕机探究 Kafka 的高可用实现
一、Kafka宕机引发的高可用问题
二、Kafka的多副本冗余设计
- Broker (节点):Kafka服务节点,简单来说一个Broker就是一台Kafka服务器,一个物理节点;
- Topic (主题):在Kafka中消息以主题为单位进行归类,每个主题都有一个 Topic Name,生产者根据Topic Name将消息发送到特定的Topic,消费者则同样根据Topic Name从对应的Topic进行消费;
- Partition (分区):Topic(主题)是消息归类的一个单位,但每一个主题还能再细分为一个或多个 Partition(分区),一个分区只能属于一个主题。主题和分区都是逻辑上的概念,举个例子,消息1和消息2都发送到主题1,它们可能进入同一个分区也可能进入不同的分区(所以同一个主题下的不同分区包含的消息是不同的),之后便会发送到分区对应的Broker节点上;
- Offset (偏移量):分区可以看作是一个只进不出的队列(Kafka只保证一个分区内的消息是有序的),消息会往这个队列的尾部追加,每个消息进入分区后都会有一个偏移量,标识该消息在该分区中的位置,消费者要消费该消息就是通过偏移量来识别。
你可能还有疑问,那要多少个副本才算够用?Follower和Leader之间没有完全同步怎么办?一个节点宕机后Leader的选举规则是什么?
-
多少个副本才算够用?
-
Follower和Lead之间没有完全同步怎么办?
-
一个节点宕机后Leader的选举规则是什么?
三、Ack参数决定了可靠程度
另外,这里补充一个面试考Kafka高可用必备知识点:request.required.asks 参数。
Asks这个参数是生产者客户端的重要配置,发送消息的时候就可设置这个参数。该参数有三个值可配置:0、1、All 。
第一种是设为0
第二种是设为1
第三种是设为All(或者-1)
四、解决问题
-
需要将 __consumer_offset 删除,注意这个Topic时Kafka内置的Topic,无法用命令删除,我是通过将 logs 删了来实现删除。 -
需要通过设置 offsets.topic.replication.factor 为3来将 __consumer_offset 的副本数改为3。
作者:JanusWoo
来源:https://juejin.im/post/6874957625998606344文章转载:高效运维
(版权归原作者所有,侵删)