我用java构建了一个kafka应用程序,它具有:
。
我是测量卡夫卡时间戳的生产者(它被卡夫卡流消费)和消费者记录(它被消费者消费)之间的时间差。所以,基本上,当制作人的唱片被创建,当这张唱片被流转换,并被送回卡夫卡时。最后,我取了数据库中每个时差的平均值。
由于任何原因,当我向主题添加更多流节点和更多分区时,这种时间差就会增大。实际上,我预计时差会减小。现在,我想知道我是否做错了什么,或者通过增加节点数量,数据处理需要更长的时间。
最后,我的问题是:通过向kafka添加更多的节点,数据处理是否可能需要更长的时间?如果是的话,原因是甚麽呢?
发布于 2020-12-03 09:50:19
“是否可能通过向kafka添加更多节点来延长数据处理时间?如果可能,原因是什么?”
是的,这是有可能发生的,这在很大程度上取决于实际产生了多少数据。通过使用更多的分区/流节点,需要在数据量和并行性之间取得平衡,以避免不必要的开销。
在您的特殊情况下,我可以想到的主要原因是KafkaProducer端的批处理效率更高,分区数量更少。
假设您有10条消息和一个分区。KafkaProducer可能会将这10条消息合并成一批,并对其进行压缩,这似乎相当有效。
现在,如果您有10个消息和10个分区,使每个消息都进入自己的分区,那么KafkaProducer必须向代理发送10个单独的发送请求(每个分区一个),而且您的压缩率也比较低,因为您总是只压缩一条消息。
此外,如果您的KafkaProducer在同步模式下工作,它必须更频繁地等待代理的答复(这可能根据生产者配置acks和max.request.in.flight而有所不同)。
https://stackoverflow.com/questions/65123197
复制相似问题