在卡夫卡处理经纪人

时间:2016-03-09 19:10:54

标签: apache-kafka broker kafka-producer-api

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

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

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

我的最后一个问题是,如果所有经纪人都关闭,我可以使用切换机制禁用生产到kafka,如果所有经纪人都已启动,则启用。 kafka中有没有关于hearthbeat问题的功能?

感谢。

1 个答案:

答案 0 :(得分:1)

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