【发布时间】:2019-08-04 09:40:04
【问题描述】:
如果我在 kafka 中有一个主题,其中包含使用整数作为键的消息。 如何创建基于该主题但不重复且消息按key排序的主题?
例如,假设主题名为“my_topic”,该主题中有5条消息:
key: "10", value: "{ value: 15 }"
key: "13", value: "{ value: 40 }"
key: "11", value: "{ value: 30 }"
key: "10", value: "{ value: 15 }"
key: "12", value: "{ value: 20 }"
然后,如何创建一个“ordered_deduplicated_my_topic”,使其只有4条消息(因为其中的消息是按key排序的,并且重复的“10”被删除了):
key: "10", value: "{ value: 15 }"
key: "11", value: "{ value: 30 }"
key: "12", value: "{ value: 20 }"
key: "13", value: "{ value: 40 }"
【问题讨论】:
-
Kafka 中的消息根据偏移量按分区排序。您不能根据键或值在主题中对它们进行排序。您订购的用例是什么?如果您更准确地描述它,那么 Kafka Streams 的某些功能可能会有用。
-
唯一的方法是 1) 使用 Kafka 流来过滤重复并订购和发布 2) 在消费者中手动执行并再次生成新主题。您可能想查看消费者端的 Kafka 流提供的内存压缩,它可以实现重复数据删除。但这里我们只讨论密钥重复数据删除。基于价值内容的去重只有通过一些应用逻辑才能实现
标签: apache-kafka