设计:将重复的状态发送到Kafka主题中

问题描述 投票:0回答:1

我正在做一个副项目,在该项目中,我将运输数据提取到kafka集群中。数据来自我市的公共API。例如:城市中的每条道路都有效。

我每隔几个小时就会上路。但是公共API没有返回timestamp,因此我无法轻易分辨出哪些道路工程是新的或最近被修改的。大多数情况下,API返回的内容自上次以来就没有移动过。我将道路工程ID用作主题关键字,并激活了日志压缩,因此重复很多并不会吓到我,因为我确定每项工​​作的最后状态都会保留下来。

但是鉴于重复的数量很多,而且我只对最新版本感兴趣,这可以吗?我是否应该尝试检测新的/修改的道路工程并仅推送那些道路工程?是否可以在Kafka中直接执行此操作?

apache-kafka kafka-producer-api
1个回答
0
投票

Kafka的日志压缩非常适合您的用例。替代方案意味着自己编写代码,同时增加额外的复杂性。

您已经注意到,启用日志压缩时,重要的是要记住,至少每个键(路线)的最后状态都保留在主题中。您仍然会发现重复项。

为了最大程度地减少重复量,从而使总体积减小,您可以调整可用的topic configurations。最值得注意的是,我建议

  • 降低min.cleanable.dirty.ratio(默认为0.5)以更频繁地进行清洁。但是,请记住,这将导致在使用更多资源时导致清洁效率低下。

  • 减少max.compaction.lag.ms(默认为MAX_LONG),以减少消息将不符合压缩条件的最长时间。

  • 设置cleanup.policy=delete,compact,如果您的应用程序有能力释放较旧的消息。在这种模式下,两个清除策略都将被激活,并且您可以在给定的保留时间(甚至字节大小)内至少保持每个键的最新状态。

此外,如果您担心卷的大小,请在生产者中应用compression.type。从Kafka 2.2.0版开始,您可以使用zstd,通常可以大大减少字节大小。

© www.soinside.com 2019 - 2024. All rights reserved.