当前位置: 首页 > 知识库问答 >
问题:

Kafka复制设置策略?

冯阳华
2023-03-14

我有两个vm服务器(比如S1和S2),需要在集群模式下安装kafka,其中只有一个分区和两个副本(一个是领导者本身,另一个是追随者),以确保可靠性。

从这个集群设置中获得了高层次的想法,希望确认以下策略是否正确。

  1. 首先将zookeeper设置为两个节点上的群集,以实现高可用性(HA)。如果我只在单个节点上设置zk,然后该节点关闭,则整个集群将关闭。正当在最新的Kafka版本中也必须使用zk吗?看来这是旧版的必备品《动物园管理员》是Kafka的必备品吗

以上策略正确吗?

有用资源

ISR

ISR与复制因子

共有2个答案

叶修永
2023-03-14

是的-Kafka2.4仍然需要ZooKeeper,但您可以阅读有关KIP-500的信息,该公司计划在不久的将来消除对ZooKeeper的依赖,并开始使用Raft算法来创建仲裁。

正如您已经了解的那样,如果您将ZK安装在单个节点上,它将在独立模式下工作,并且您没有任何弹性。经典的ZK集成由3个节点组成,它允许您丢失1个ZK节点。

将Kafka代理指向正确的ZK集群后,可以启动代理,集群将启动并运行。

在您的示例中,我建议您创建另一个节点,以获得更好的弹性并满足您想要的复制因子,同时仍然能够在不丢失数据的情况下丢失一个节点。

请记住,使用单个分区意味着每个消费者组只能有一个消费者。其余的消费者将无所事事。

我建议您阅读这篇关于Kafka最佳实践以及如何选择Kafka集群中的主题/分区数量的博客。

姜兴业
2023-03-14

首先在两个节点上设置zooKeer作为集群以实现高可用性(HA)。如果我只在单个节点上设置zk,然后该节点关闭,则整个集群将关闭。对吗?在最新的kafka版本中也必须使用zk吗?看起来旧版本必须使用ZooKeer是Kafka必须的吗?

答:是的。在KIP-500发布之前,ZooKeer仍然是必须的。ZooKeer负责选择控制器、存储有关Kafka集群的元数据和管理代理成员资格(链接)。理想情况下,ZooKeer节点的数量应该至少为3个。通过这种方式,您可以容忍一个节点故障。(2个健康的ZooKeer节点(集群中的大多数)仍然能够选择控制器))您还应该考虑在安装Kafka的机器以外的不同机器上设置ZooKeer集群。因此,服务器故障不会导致ZooKeer和Kafka节点同时丢失。

在两个节点上启动kafka代理。它可以在同一个端口上,因为它托管在不同的节点上。

答:您应该首先启动Zoomaster集群,然后启动Kafka集群。不同节点上的相同端口是合适的。

在分区为1和副本为2的任何节点上创建主题。

答:分区用于水平可伸缩性。如果你不需要这个,一个分区就可以了。通过复制因子2,其中一个节点在任何时候都将是领导者,而其中一个节点将是追随者。但这还不足以完全避免数据丢失并提供HA。您应该至少有3个Kafka代理,3个主题复制因子,min.insync。在理想的配置中,副本=2作为代理配置,acks=all作为生产者配置,通过不损害HA避免数据丢失。(有关更多信息,请查看此项)

zookeeper将选择一个节点上的任何代理作为领导者,另一个作为追随者

答:控制器代理负责维护所有分区的领导者/追随者关系。一个代理将是分区领导者,另一个将是追随者。您可以使用此命令检查分区领导者/追随者。

bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic

生产者将连接到任何代理并开始发布消息。

回答:是的。仅将一个代理设置为引导。服务器足以连接到Kafka群集。但对于冗余,您应该在引导程序中提供多个代理。服务器。

独自创立服务器:用于建立到Kafka群集的初始连接的主机/端口对列表。客户机将使用所有服务器,而不管此处指定了用于引导的服务器。此列表仅影响用于发现全套服务器的初始主机。此列表的格式应为host1:port1、host2:port2,。。。。由于这些服务器仅用于初始连接以发现完整的集群成员身份(可能会动态更改),因此此列表不需要包含完整的服务器集(不过,如果服务器关闭,您可能需要多个服务器)。

如果领导者关闭,动物园管理员会自动选择另一个节点作为领导者。不确定现在如何维护2的副本,因为现在只有一个节点处于活动状态?

答:如果Controller代理关闭,ZooKeer会选择另一个代理作为新的Controller。如果作为分区领导者的代理关闭,其中一个同步副本将成为新的领导者。(控制器代理对此负责)但是当然,如果您只有两个代理,那么复制是不可能的。这就是为什么您的Kafka集群中应该至少有3个代理。

 类似资料:
  • 6.6.1. 将复制升级到5.0版当在复制设置中升级服务器时,升级过程取决于当前的服务器版本和要升级的服务器版本。 6.6.1. 将复制升级到5.0版该节适用于将复制从MySQL 3.23、4.0或者4.1升级到5.1。4.0服务器应为4.0.3或更新版。 当将早期MySQL版本系列主服务器升级到5.1时,应先确保该主服务器的所有从服务器使用了相同的5.1.x版本。如果不是这样,你应先升级从服务器

  • 这里简单描述了如何为你当前的MySQL服务器设置完整的复制。假设你想要复制主服务器上的所有数据库,并且还没有配置的复制。你需要关闭主服务器来完成下面所列的步骤。 下面的程序针对设置一个从服务器,你可以用来设置多个从服务器。 虽然该方法是设置从服务器的最直接的途径,它并不是唯一的一个。例如,如果你有一个主服务器的数据快照,并且主服务器已经设置了服务器ID,启用了二进制日志,不需要关闭主服务器或停止对

  • 我正在使用3代理Kafka。如果我停止第三个节点:没问题,我可以从节点1或2消耗日志。如果我停止第二个节点:没问题,我可以从节点1或3消耗日志。如果我停止第一个节点:我不能消耗任何东西。 当我重新启动kafka runner服务时。日志在这里,写得很好。 我的主题配置是:主题:log_topic主题ID:xxx分区计数:32复制因子:3配置:segment.bytes=1073741824,ret

  • 我想用替换大于任意数字(本例中为100)的

  • 我有一个配置bean 然而,当我检查时 似乎没有设置我的任何设置。 我假设我可能在放入配置之前无意中创建了主题。我的问题是如何让我的应用程序检测到NewTopic的值与当前的配置匹配,否则会终止应用程序上下文。 或者强制更新。

  • 本节介绍Mixer的配置模型。 背景 Istio是一个具有数百个独立功能的复杂系统。Istio部署可能涉及数十个服务的蔓延事件,这些服务有一群Envoy代理和Mixer实例来支持它们。在大型部署中,可能在管理整体部署中涉及到许多运维人员(每个运维人员都有不同的领域和责任范围)。 Mixer的配置模式可以利用其所有功能和灵活性,同时保持使用的相对简单。该模型的范围特征使大型支持组织能够轻松地集中管理