1

我在异步模式下使用 kafka 生产者,但是当所有代理都关闭时,它就像同步一样,它一直等到 metadata.fetch.timeout.ms 过期,我的情况是 60 秒。我的第一个问题,这是正常行为还是我做错了什么?

由于我的逻辑中的事务最多应在 100 毫秒内完成,因此这个超时值对我来说是一个非常大的延迟。也许将 metadata.fetch.timeout.ms 设置为 10 ms 可能会解决我的问题,但我不确定这对我的系统有何影响。这是否会导致某个地方出现瓶颈或大量消耗 CPU?

另一种可能的解决方案可能是在 executorservice 中生成消息,这使得生成真正异步,但我不想让事情变得更复杂。以前有人试过吗?

我的最后一个问题是,如果所有代理都关闭,我是否可以使用切换机制禁用对 kafka 的生产,如果所有代理都启动,则启用。kafka 中的心跳问题是否有任何功能?

谢谢。

4

1 回答 1

1

最好的方法是直接连接到 Zookeeper。不确定您使用什么语言,但应该有可用的 Zookeeper 客户端。我使用 Node,它有node-zookeeper-client. 在 Node 中,您首先调用 do createClient(),然后getChildren()在 Zookeeper 路径上调用 do /brokers/ids。至少在 Node 中,您可以设置一个触发器以在每次 id 数组更改时更改。当没有孩子时,所有经纪人都倒下了。只要有孩子,就有经纪人了。

于 2016-03-11T01:08:01.110 回答