我应该将数据推送到集群中的哪个节点?

Which node should I push data to in a cluster?

我设置了一个包含 3 个节点的 kafka 集群。

kafka01.example.com
kafka02.example.com
kafka03.example.com

Kafka 进行复制,以便可以在不丢失数据的情况下删除集群中的任何节点。

通常我会将所有数据发送到 kafka01,但是如果那个节点出现故障,这将破坏整个集群。

处理集群时的行业最佳实践是什么?我正在评估使用循环负载平衡设置 NGINX 反向代理。然后我可以将所有数据生产者指向代理,它将在节点之间分配。

我需要确保在其中一个节点不可用时不会丢失任何数据。

通常情况下,您的生产者负责将数据分发到所有(或选定的一组)节点,并且 运行 通过在循环模式下使用分区函数或使用您的某些语义选择。生产者发布到一个主题的分区,不同的节点是一个主题的不同分区的领导者。如果代理节点变得不可用,则该节点将脱离集群(同步副本),并且将选择该节点上分区的新领导者。通过元数据 requests/responses,您的生产者将意识到这一事实并将消息推送到当前正在运行的其他节点。