写入kafka跟随者节点

Writing to a kafka follower node

是否可以写入kafka 跟随者节点?我问这个是因为我们有时会遇到以下情况 - 包含代理的特定主机是某些分区的领导节点,生产者主机无法访问它,但实际上保持正常(即生产者和领导主机之间的网络问题),所以没有选出新的领导人。

要创建一个人为的示例,可以使用防火墙阻止主机或端口。在我人为的例子中,我有

h0: has seven brokers running on ports 9092 - 9098
h1: 3 brokers running between 9092 - 9094
h2: 3 brokers running between 9092 - 9094
h3: 3 brokers running between 9092 - 9094

我阻止了传出端口 9092,正如预期的那样,大约 25% 的消息没有写入,并且如预期的那样出错。

在现实世界中,我曾见过一个主机无法从生产者主机访问约 5 分钟。

有什么方法可以保证消息写入到kafka集群中吗?

无法从 Kafka protocol details:

向关注者发送消息

These requests to publish or fetch data must be sent to the broker that is currently acting as the leader for a given partition. This condition is enforced by the broker, so a request for a particular partition to the wrong broker will result in an the NotLeaderForPartition error code (described below).

你可以想出一些有想象力的解决方案,比如建立一个完全独立的Kafka集群,如果主集群无法访问,就在那里生产,让MirrorMaker将数据从辅助Kafka克隆到主集群,或者将数据转发到一些如果您的 use-case 确实需要,可以连接到 Kafka 集群的其他主机。但是好吧,大多数选择似乎有点复杂和昂贵...

也许最好只是缓冲数据并等待恢复连接,或者调查并投资改进网络,这样会有更多的冗余,并且更难在主机和 Kafka 集群之间进行网络分区。