我有两个vm服务器(比如s1和s2),需要在集群模式下安装kafka,其中只有一个分区和两个副本(一个本身是leader,另一个是follower),以确保可靠性。
从这个集群设置中得到了高层次的想法,我想确认下面的策略是否正确。
首先在两个节点上将zookeeper设置为集群,以获得高可用性(ha)。如果我只在单个节点上设置zk,然后该节点关闭,则整个集群将关闭。正确的?在最新的Kafka版本中是否也必须使用zk?看来这是旧版的必修课,是Kafka的必修课吗?
在两个节点上启动kafka代理。它可以位于同一端口上,因为它承载在不同的节点上。
在分区1和副本为2的任何节点上创建主题。
zookeeper将选择一个节点上的任何代理作为引导者,另一个作为跟随者
producer将连接到任何代理并开始发布消息。
如果引线下降,zookeeper将自动选择另一个节点作为引线。不确定2的副本现在将如何维护,因为现在只有一个节点处于活动状态?
以上策略正确吗?
有用的资源
情报监视
isr与复制因子
2条答案
按热度按时间hjzp0vay1#
是的,kafka 2.4仍然需要zookeeper,但是您可以阅读kip-500,它计划在不久的将来消除对zookeeper的依赖,并开始使用raft算法来创建仲裁。
正如您已经了解的,如果您将zk安装在单个节点上,它将以独立模式工作,您将没有任何弹性。经典的zk集合由3个节点组成,它允许您丢失1个zk节点。
将kafka代理指向正确的zk集群后,您可以启动代理,集群将启动并运行。
在您的示例中,我建议您创建另一个节点,以获得更好的恢复能力并满足您想要的复制因子,同时仍然能够在不丢失数据的情况下丢失一个节点。
请记住,使用单个分区意味着每个消费群体只能有一个消费群体。剩下的消费者将无所事事。
我建议您阅读这篇关于kafka最佳实践以及如何选择kafka集群中的主题/分区数量的博客。
jv2fixgn2#
首先在两个节点上将zookeeper设置为集群,以获得高可用性(ha)。如果我只在单个节点上设置zk,然后该节点关闭,则整个集群将关闭。正确的?在最新的Kafka版本中是否也必须使用zk?看来这是旧版的必修课,是Kafka的必修课吗?
回答:是的。在kip-500被释放之前,Zookeeper仍然是必须的。zookeeper负责选择控制器、存储kafka集群的元数据和管理代理成员(link)。理想情况下,zookeeper节点的数量应至少为3个。通过这种方式,您可以容忍一个节点故障(2个健康的zookeeper节点(集群中的大多数节点)仍然能够选择控制器)您还应该考虑在不同的机器上设置zookeeper集群,而不是安装kafka的机器。因此,服务器故障不会导致zookeeper和kafka节点同时丢失。
在两个节点上启动kafka代理。它可以位于同一端口上,因为它承载在不同的节点上。
答:首先启动zookeeper集群,然后启动kafka集群。不同节点上的相同端口是合适的。
在分区1和副本为2的任何节点上创建主题。
答:分区用于水平扩展。如果你不需要这个,一个分区就可以了。通过使用复制因子2,其中一个节点在任何时候都将是领导者,而其中一个节点将是追随者。但这对于完全避免数据丢失以及提供ha是不够的。你至少应该有3个Kafka经纪人,3个主题复制因子,
min.insync.replicas=2
作为代理配置和acks=all
作为producer config,它是避免数据丢失的理想配置,不会影响ha(有关详细信息,请查看此项)zookeeper将选择一个节点上的任何代理作为引导者,另一个作为跟随者
答:controllerbroker负责维护所有分区的leader/follower关系。一个代理将是分区的领导者,另一个代理将是追随者。您可以使用此命令检查分区引线/跟随者。
producer将连接到任何代理并开始发布消息。
回答:是的。仅将一个代理设置为bootstrap.servers就足以连接到kafka集群。但对于冗余,应该在bootstrap.servers中提供多个代理。
bootstrap.servers:用于建立到kafka集群的初始连接的主机/端口对的列表。客户机将使用所有服务器,而不管此处为引导指定了哪些服务器。此列表仅影响用于发现整套服务器的初始主机。此列表的格式应为host1:port1,host2:port2,。。。。由于这些服务器只是用于初始连接以发现完整的集群成员身份(可能会动态更改),因此此列表不需要包含完整的服务器集(不过,如果服务器关闭,您可能需要多个服务器)。
如果引线下降,zookeeper将自动选择另一个节点作为引线。不确定2的副本现在将如何维护,因为现在只有一个节点处于活动状态?
答:如果控制器代理失败,zookeeper将选择另一个代理作为新的控制器。如果作为分区领导者的代理崩溃,其中一个同步副本将成为新的领导者(控制器代理负责这一点),但当然,如果您只有两个代理,那么复制将是不可能的。这就是为什么你应该有至少3个经纪人在你的Kafka集群。