卡夫卡复制设置策略?

Kafka setup strategy for replication?

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

从中得到了高层次的想法cluster setup想要确认以下策略是否正确。

  1. 首先在两个节点上将 zookeeper 设置为集群以实现高可用性 (HA)。如果我仅在单个节点上设置 zk 然后该节点出现故障,则完成集群 会下来。正确的 ?在最新的 kafka 版本中也必须使用 zk 吗?看起来它对旧版本来说是必须的 Is Zookeeper a must for Kafka?
  2. 在两个节点上启动 kafka 代理。它可以位于同一端口上,因为它托管在不同的节点上。
  3. 在分区 1 和副本为两个的任何节点上创建主题。
  4. zookeeper 将 select 一个节点上的任何代理作为领导者,另一个作为跟随者
  5. 生产者将连接到任何代理并开始发布消息。
  6. 如果 leader 宕机,zookeeper 会自动 select 另一个节点作为 leader。不确定现在如何维护 2 的副本,因为只有 现在有一个节点?

以上策略是否正确?

有用的资源

ISR

ISR vs replication factor

是 - Kafka 2.4, but you can read about KIP-500 仍然需要 ZooKeeper,它计划在不久的将来消除对 ZooKeeper 的依赖并开始使用 Raft 算法来创建仲裁。

如您所知,如果您将在单个节点上安装 ZK,它将以独立模式运行,您将没有任何弹性。经典的 ZK ensemble 包含 3 nodes,它可以让你失去 1 个 ZK 节点。

将您的 Kafka 代理指向右侧后 ZK cluster 您可以启动您的代理,集群将启动并且 运行。

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

请记住,使用单个分区意味着每个消费者组 单个消费者。其余的消费者将闲置。

我建议您阅读这篇关于 Kafka 的博客 Best Practices and how to choose the number of topics/partitions in a Kafka cluster

First set up zookeeper as cluster on both nodes for high availability(HA). If I do setup zk on single node only and then that node goes down, complete cluster will be down. Right ? Is it mandatory to use zk in latest kafka version also ? Looks it is must for older version Is Zookeeper a must for Kafka?

答:是的。在 KIP-500 will be released. Zookeeper is responsible for electing controller, storing metadata about Kafka cluster and managing broker membership ( 之前,Zookeeper 仍然是必须的。理想情况下,Zookeeper 节点的数量至少应为 3。通过这种方式,您可以容忍一个节点故障。 (2 个健康的 Zookeeper 节点(集群中的大多数)仍然能够 selecting 控制器))您还应该考虑在安装 Kafka 的机器以外的不同机器上设置 Zookeeper 集群。因此服务器故障不会导致 Zookeeper 和 Kafka 节点都丢失。

Start the kafka broker on both nodes . It can be on same port as it is hosted on different nodes.

答:应该先启动Zookeeper集群,再启动Kafka集群。不同节点上的相同端口是合适的。

Create Topic on any node with partition 1 and replica as two.

答案:分区用于水平可伸缩性。如果你不需要这个,一个分区就可以了。通过具有复制因子 2,其中一个节点将成为领导者,而其中一个节点将随时成为追随者。但这对于完全避免数据丢失以及提供 HA 是不够的。您应该至少有 3 个 Kafka 代理,主题的 3 个复制因子,min.insync.replicas=2 作为代理配置和 acks=all 作为理想配置中的生产者配置,以避免通过不损害 HA 来避免数据丢失。 (您可以查看 this 了解更多信息)

zookeeper will select any broker on one node as leader and another as follower

答案:控制器代理负责维护所有分区的leader/follower关系。一个经纪人将成为分区领导者,另一个经纪人将成为追随者。您可以使用此命令检查分区 leaders/followers。

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

Producer will connect to any broker and start publishing the message.

答:是的。仅将一个代理设置为 bootstrap.servers 就足以连接到 Kafka 集群。但是为了冗余,您应该在 bootstrap.servers.

中提供多个经纪人

bootstrap.servers: A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).


If leader goes down, zookeeper will select another node as leader automatically . Not sure how replica of 2 will be maintained now as there is only one node live now ?

答案:如果Controllerbroker宕机,Zookeeper会select另一个broker作为新的Controller。如果您的分区 领导者代理 出现故障,其中一个同步副本将成为新的领导者。 (Controller broker 对此负责)但是,当然,如果您只有两个 broker,那么复制将是不可能的。这就是为什么你的 Kafka 集群中应该至少有 3 个代理。