我在异步模式下使用kafka producer,但当所有代理都关闭时,它会像sync一样运行,并等待metadata.fetch.timeout.ms过期,对于我的情况是60秒。我的第一个问题,这是正常的行为还是我做错了什么?
因为我的逻辑中的事务最多应该在100毫秒内完成,所以这个超时值对我来说是一个非常大的延迟。也许将metadata.fetch.timeout.ms设置为10 ms可以解决我的问题,但我不确定这对系统有何影响。这是否会导致某个地方的cpu瓶颈或大量消耗?
另一个可能的解决方案可能是在executorservice中生成消息,这使得生成过程真正异步,但我不想让事情变得更复杂。以前有人试过这个吗?
我的最后一个问题是,我可以使用切换机制来禁用生产Kafka,如果所有的经纪人是下降的,并启用,如果所有经纪人是上升。在Kafka有没有什么功能可以解决hearthbeat的问题?
谢谢。
1条答案
按热度按时间lbsnaicq1#
最好的方法是直接挂到zookeeper上。不知道你用什么语言,但应该有一个zookeeper客户端可用。我使用node,它有
node-zookeeper-client
. 在node中,您调用first docreateClient()
,然后做getChildren()
在动物园的小路上/brokers/ids
. 至少在node中,您可以在每次id数组更改时设置一个触发器。如果没有孩子,所有的经纪人都会破产。只要有孩子,那就有经纪人了。