gpt4 book ai didi

java - 在kafka中创建多少生产者?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:56 25 4
gpt4 key购买 nike

在一个高容量的实时 java web 应用程序中,我正在向 apache kafka 发送消息.目前我正在向单个主题发送消息,但将来我可能需要向多个主题发送消息。

在这种情况下,我不确定是否应该为每个主题创建一个制作人,还是应该为我的所有主题使用一个制作人?

这是我的代码:

props = new Properties();
props.put("zk.connect", <zk-ip1>:<2181>,<zk-ip3>:<2181>,<zk-ip3>:<2181>);
props.put("zk.connectiontimeout.ms", "1000000");
props.put("producer.type", "async");

Producer<String, Message> producer = new kafka.javaapi.producer.Producer<String, Message>(new ProducerConfig(props));

ProducerData<String, Message> producerData1 = new ProducerData<String, Message>("someTopic1", messageTosend);
ProducerData<String, Message> producerData2 = new ProducerData<String, Message>("someTopic2", messageTosend);

producer.send(producerData1);
producer.send(producerData2);

如您所见,一旦创建了生产者,我就可以使用它向不同的主题发送数据。我想知道最佳做法是什么?如果我的应用程序发送到多个主题(每个主题获取不同的数据),我可以/应该使用单个生产者还是应该创建多个生产者?什么时候(一般来说)我应该使用多个生产者?

最佳答案

一般来说,所有主题的单一生产者网络效率更高。

如果 kafka 客户端在同一个 Kafka 节点上看到多个主题+分区,它可以在一条消息中为两个主题+分区发送消息。 Kafka 针对消息批处理进行了优化,因此效率很高。

此外,您的 Web 服务器只需要与每个 Kafka 节点保持至多一个 tcp 连接,而不是每个节点每个生产者一个连接。

有关 Kafka 设计的更多信息: https://kafka.apache.org/documentation.html#design

正如您在评论中提到的,锁争用可能成为一个限制因素,YMMV。

关于java - 在kafka中创建多少生产者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21376715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com