首先在两个节点上设置zookeeper作为集群高
可用性(HA)。如果我只在单个节点上设置 zk 然后
节点宕机,整个集群将宕机。正确的 ?是强制性的吗
在最新的 kafka 版本中也可以使用 zk 吗?看来是老年人必备
version Zookeeper 是 Kafka 的必备品吗?
回答:是的。 Zookeeper 仍然是必须的,直到KIP-500 被释放。 Zookeeper 负责选举控制器、存储有关 Kafka 集群的元数据和管理代理成员资格 (link)。理想情况下,Zookeeper 节点的数量应至少为 3。通过这种方式,您可以容忍一个节点故障。 (2 个健康的 Zookeeper 节点(集群中的大多数)仍然能够选择控制器))您还应该考虑在安装了 Kafka 的机器之外的不同机器上设置 Zookeeper 集群。因此服务器的故障不会导致 Zookeeper 和 Kafka 节点都丢失。
在两个节点上启动 kafka 代理。它可以在同一个端口上
托管在不同的节点上。
回答:你应该先启动 Zookeeper 集群,然后启动 Kafka 集群。不同节点上的相同端口是合适的。
在分区 1 和副本为两个的任何节点上创建主题。
答案: 分区用于水平扩展。如果你不需要这个,一个分区就可以了。通过具有复制因子 2,其中一个节点将成为领导者,而其中一个节点将随时成为追随者。但这不足以完全避免数据丢失以及提供 HA。您应该至少有 3 个 Kafka 代理,3 个主题复制因子,min.insync.replicas=2 作为代理配置,acks=all 作为生产者配置,这是在不影响 HA 的情况下避免数据丢失的理想配置。 (您可以查看this了解更多信息)
zookeeper 将选择一个节点上的任何代理作为领导者,另一个作为
追随者
答案: Controller broker 负责维护所有 partition 的 leader/follower 关系。一位经纪人将成为分区领导者,另一位经纪人将成为追随者。您可以使用此命令检查分区领导者/追随者。
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
生产者将连接到任何代理并开始发布消息。
回答:是的。仅将一个代理设置为 bootstrap.servers 就足以连接到 Kafka 集群。但是为了冗余,您应该在 bootstrap.servers 中提供多个代理。
bootstrap.servers:用于建立的主机/端口对列表
与 Kafka 集群的初始连接。客户将使用
的所有服务器,无论此处指定了哪些服务器
bootstrapping——这个列表只影响最初使用的主机
发现全套服务器。此列表应采用以下形式
host1:port1,host2:port2,.... 由于这些服务器仅用于
初始连接以发现完整的集群成员(可能
动态变化),这个列表不需要包含完整的
服务器(但您可能需要多个服务器,以防一台服务器
下)。
如果leader宕机,zookeeper会选择另一个节点作为leader
自动地 。不确定现在将如何维护 2 的副本
现在只有一个节点吗?
答案:如果Controller broker 宕机,Zookeeper 会选择另一个 broker 作为新的 Controller。如果作为您的分区的领导者的代理出现故障,同步副本之一将成为新的领导者。 (控制器代理对此负责)但是当然,如果您只有两个代理,那么复制将是不可能的。这就是为什么您的 Kafka 集群中应该至少有 3 个代理。