当前位置: 首页 > 网络应用技术

从Kafka节点停机时间探索Kafka的高可用实现

时间:2023-03-08 10:21:04 网络应用技术

  逻辑模型

  经纪人(节点):Kafka服务节点,只是一个代理是Kafka服务器,物理节点;

  主题(主题):在Kafka中,主题由主题归类。每个主题都有一个主题名称。生产者根据主题名称将消息发送到特定主题。消费者还基于来自相应主题消费的相应主题的主题名称;

  分区(分区):主题(主题)是消息分类的单位,但是每个主题都可以细分为一个或多个分区(分区),并且一个分区只能属于一个主题。差异)将发送到相应经纪人节点根据分区;

  偏移(位移):可以将分区视为无法输入的队列(Kafka仅保证一个分区中的消息有序是有序的),并且该消息将添加到此队列的尾巴中。消息在分区中的位置,消耗消息的消费者是通过偏移识别。

  实际上,根据上述概念,您是否猜到Kafka的多副本冗余设计?不用担心,让我们继续低头。在Kafka 0.8版本之前,没有多副本的冗余机制。一旦悬挂了节点,就不再消耗该节点上的所有分区的数据。这等同于发送到主题的数据的一部分。

  在0.8版本解决停机后的数据丢失问题之后,引入副本的副本。副本基于主题中每个分区的数据,每个分区的数据将与其他物理节点同步以形成多个副本。每个分区副本包括一个领导者副本和多个追随者副本。Leader均由所有副本选择,其他副本是追随者的副本。生产者写作或消费者阅读时,他们只会与领导者打交道。编写数据后,追随者将拉动数据以同步数据。

  这很简单吗?是的,基于上述多复制架构图,Kafka高度可用。当经纪人挂断电话时,担心,此经纪人的其他经纪人节点上仍然有一个副本。向上?我应该怎么做?那么您可以选举追随者的领导者,制片人和消费者可以与新领导者一起玩乐。这很高。

  您可能有任何疑问,您需要足够多少份?如果跟随者和领导者之间没有完全同步,该怎么办?在节点下降后,领导者的选举规则是什么?

  直接结论:

  几份足够?

  必须保证的副本越多,Kafka的高可用性就越高,但是副本越多地意味着互联网和磁盘资源的消费,性能将降低。通常,说话调整复制因子参数。

  如果追随者和铅之间没有完全同步,该怎么办?

  追随者和领导者并没有完全同步,但并非完全差异,而是使用ISR机制。EAVERDEAD动态维护ISR列表,该列表存储了基本上与该列表中的领导者同步的追随者。如果Follower没有启动数据请求,由于网络,GC和其他原因,目前,追随者的同步并不比领导者同步,并且将被踢出ISR列表。因此,ISR列表中的追随者可以跟上领导者的副本。

  节点下降后领导者的选举规则是什么?

  有许多分布式选举规则,例如Zab,Raft,ViewStamped Replication,Microsoft的Pacifica等。Kafka的领导者选举构想非常简单。根据我们上面提到的ISR列表,将在停机后按顺序找到。如果发现的副本在ISR列表中,则将其选为领导者。此外,有必要确保前领导者已经被放弃,否则将发生大脑破裂(两个领导者)。如何保证它?KAFKA SETS向上控制器,以确保只有一个领导者。

  此外,这是一个补充访谈测试KAFKA高可用知识点:请求。required.asks参数。

  询问参数是生产者客户端的重要配置。发送消息时可以设置此参数。此参数具有三个要配置的值:0,1,all。

  第一个设置为0表示,在生产者发送消息后。之后,消息是死亡或现场直播。如果您对大自然不承担任何责任,可能会丢失,并且您可能会失去可用性。

  第二个设置为1表示,在制作人发送消息后,该消息已成功地传达给领导者,并且其他追随者是否同步也没关系。在一种情况下,领导者刚刚收到了这一消息。追随者有一个停顿的同步经纪人,但制片人已经相信这一消息是成功的,然后这时该新闻丢失了。注意将其设置为1是Kafka的默认配置。可以看出,Kafka的默认配置不是那么高度可用,而是权衡高可用性和高通量的高度。

  第三是毕竟(或-1)意味着在生产者发送消息后,不仅领导者会收到消息,而且ISR列表中的追随者也必须同步,以便成功发送生产者。进一步思考,询问=所有人都不会丢失吗?答案是答案。当仅留下ISR列表时,asks =所有等同于asks = 1。,只有当asks =全部并且ISR中有两个副本可以确保数据不会丢失时,才能保证数据。

  经过大圆圈之后,我了解了Kafka的高可用性机制,并最终回到了我们的最初问题本身。为什么在节点下降后不使用kafka的节点?

  测试环境开发中的经纪节点的数量为3,主题的数量为3,分区数为6,并且询问参数为1。

  当一个节点在三个节点中关闭时,群集会做什么?正如我们上面提到的那样,这是正确的,该集群发现分区的负责人无效。潜在的数据丢失。

  因此,只要主题副本的数量设置为与经纪人相同的数字,Kafka的多副本冗余设计就可以确保高可用性,如果没有市区,则将无法使用(但是需要是指出Kafka有一些保护策略,Kafka停止了超过一半的节点时)。考虑到它,是否有一个主题,有1个副本在kafka上?问题在于消费者_offset。consumer_offset是一个由kafka自动创建的主题,以存储用于消费者消费的officet(偏移)信息,默认情况下分区的数量为50。此主题,其默认复制号为1.如果所有分区都存在于同一机器上,则显而易见的是单点失败!当给出__consumer_offset的分区经纪人杀死时,所有消费者都将停止消费。

  如何解决此问题?您需要删除__consumer_offset。请注意,在此主题期间未使用Kafka的构建主题,您无法使用命令删除它。我通过删除日志来删除它。

  您需要通过将offsets.topic.replication.factor设置为3,将__consume_offset的副本数设置为3。

  由__consumer_offset还制作了复制冗余的副本,在节点停机后,消费者消耗问题。

  最后,__consume_offset的分区似乎只会在一个经纪人上染色,而不是在每个经纪人上分发。