2016-03-09 50 views
1

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

由于我的逻辑中的事务应该在最大100毫秒内完成,所以这个超时值对我来说是一个非常大的延迟。也许设置metadata.fetch.timeout.ms到10毫秒可能会解决我的问题,但我不知道这是如何影响我的系统。这是否会在某处导致CPU瓶颈或大量消耗?

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

我的最后一个问题是,如果所有经纪人都关闭了,并且所有经纪人都启动了,那么我可能会使用开关机制来禁用生产到卡夫卡。 kafka有没有任何心跳问题的功能?

谢谢。

回答

0

最好的方法是直接挂钩到Zookeeper中。不知道你使用哪种语言,但应该有一个Zookeeper客户端可用。我使用节点,它有node-zookeeper-client。在节点中,您首先拨打createClient(),然后在Zookeeper路径/brokers/ids上执行getChildren()。至少在Node中,您可以设置一个触发器,以在每次更改id数组时更改。当没有孩子时,所有的经纪人都失败了。只要有孩子,那么就有一个经纪人。