从过去10天开始,我试图在不同的机器上设置Kafka:
-
Server32
-
Server56
以下是我到目前为止所完成的任务列表
- 配置Zookeeper并在两台服务器上启动
server.1 = Server32_IP:2888:3888 server.2 = Server56_IP:2888:3888
- 我还更改了server和server-1属性,如下所示
broker.id = 0 port = 9092 log.dir = / tmp / kafka0-logs host.name = Server32 zookeeper.connect = Server32_IP:9092,Server56_IP:9062
&server-1
broker.id = 1 port = 9062 log.dir = / tmp / kafka1-logs host.name = Server56 zookeeper.connect = Server32_IP:9092,Server56_IP:9062
Server.property我在Server32中运行
Server-1.property我在Server56中运行
问题是:当我在两个服务器中启动 生产环境 者时,如果我尝试从任何一个消费,那么它正在工作但是当我停止任何一个服务器然后另一个服务器无法发送详细信息
请帮我解释一下这个过程
2 回答
运行2名动物园管理员不具备容错能力 . 如果其中一个动物园管理员停止了,那么系统将无法运行 . 与Kafka代理不同,zookeeper需要法定数量(或大多数)配置的节点才能工作 . 这就是为什么zookeeper通常部署有奇数个实例(节点)的原因 . 由于2个节点中的1个不是多数,因此它确实不比运行单个zookeeper更好 . 您需要至少3名动物园管理员才能容忍失败,因为3人中有2人占多数,因此系统会保持不变 .
Kafka是不同的,因此您可以拥有任意数量的Kafka代理,如果它们配置正确并且您创建的主题复制因子为2或更高,那么如果您将任何一个代理节点关闭,Kafka群集可以继续如果它只是2的1 .
这里缺少很多信息,比如Kafka版本以及您是否使用新的消费者API或旧API . 我假设您可能正在使用新版本的Kafka,如0.10.x以及新的客户端API . 在新版本的客户端API中,日志数据存储在Kafka代理中,而不是旧版本中的Zookeeper . 我认为您的问题是您创建的主题的复制因子为1,并且您关闭的Kafka代理服务器同时托管了唯一的副本,因此您将无法生成或使用消息 . 您可以通过运行以下命令来确认主题的运行状况:
您可能希望将复制因子增加到2.这样您就可以通过一个代理失败来逃脱 . 理想情况下,您将拥有3个或更多复制因子为2或更高的Kafka Broker服务器(显然不超过群集中的代理数) . 请参阅以下链接:
https://kafka.apache.org/documentation/#basic_ops_increase_replication_factor