【发布时间】:2020-09-22 18:05:23
【问题描述】:
我创建了一个复制因子 = 2、分区计数 = 1 和代理计数 = 3 的 Kafka 主题。
如果在消费者中将所有 3 个代理都指定为引导服务器,是否会正确读取消息?
当消费者到达没有副本的节点时,消息不会被消费吗?还是那样不行?
【问题讨论】:
标签: java apache-kafka kafka-consumer-api
我创建了一个复制因子 = 2、分区计数 = 1 和代理计数 = 3 的 Kafka 主题。
如果在消费者中将所有 3 个代理都指定为引导服务器,是否会正确读取消息?
当消费者到达没有副本的节点时,消息不会被消费吗?还是那样不行?
【问题讨论】:
标签: java apache-kafka kafka-consumer-api
Kafka 代理在内部相互通信。
这意味着,如果您的消费者只知道其中一个代理,它将与集群中的所有代理进行通信,以确定分区领导者位于哪个代理上。然后您的消费者将从该代理消费。
但是,通常最好在您的使用者配置bootstrap.servers 中不仅提供一个代理地址,还提供一个以上甚至所有地址作为逗号分隔的列表。这样,即使其中一个代理出现故障,您的消费者仍然能够获取数据。
如果在消费者中将所有 3 个代理都指定为引导服务器,是否会正确读取消息?
是的。但是,每个分区作为分区领导者位于其中一个代理上,因此您的消费者只会使用来自该代理的数据。
当消费者到达没有副本的节点时,消息不会被消费吗?
没有。如上所述,broker 之间正在相互通信以确定分区领导者位于哪个代理上。
【讨论】: