在Kafka中搜索时间点(key: validFrom, validTill)
Search for point in time in Kafka (key: validFrom, validTill)
我有一些用例,其中承包商在我的住房项目中工作了指定的时间。我想将它映射到 kafka 并想到了一个主题:
key : {"validFrom":"2019-09-01", "validTill":"2019-10-10", "name":"contractor1"}
消息更复杂,例如“contractor1
”在哪个工作日对我有效的费用会有所不同。
我的另一个服务将查询“2019-10-02”的主题,链接到 validFrom - validTill
之间的密钥的消息将是返回。
这是使用 kafka 的一种有意义的方式吗?还是我想错了方向?(密钥将是唯一的)
如果 "point in time" 是指消息创建的时间,那么您可以按消息时间戳进行搜索 - 这种搜索非常有效,因为时间戳是在服务器端编制索引的。
如果您想根据某些消息字段的值查找消息,例如 "validFrom" - 对于大型主题,这将花费一些时间 - 您必须扫描主题中的每条消息。因此,结合使用这两种方法是有意义的。
一些 UI 工具允许您进行这种开箱即用的搜索,看看 Kafka Magic https://www.kafkamagic.com - 它允许使用标准 JavaScript 结合 timestamp/partition/offset 个过滤器。
如果您正在编写自己的解决方案 - 许多语言的标准 Kafka 客户端 SDK 具有按时间戳定位消息的方法 - 将您的消费者指向开始时间戳并逐条阅读消息,直到找到您要查找的内容。这是一个完全有效的方法。
我有一些用例,其中承包商在我的住房项目中工作了指定的时间。我想将它映射到 kafka 并想到了一个主题:
key : {"validFrom":"2019-09-01", "validTill":"2019-10-10", "name":"contractor1"}
消息更复杂,例如“contractor1
”在哪个工作日对我有效的费用会有所不同。
我的另一个服务将查询“2019-10-02”的主题,链接到 validFrom - validTill
之间的密钥的消息将是返回。
这是使用 kafka 的一种有意义的方式吗?还是我想错了方向?(密钥将是唯一的)
如果 "point in time" 是指消息创建的时间,那么您可以按消息时间戳进行搜索 - 这种搜索非常有效,因为时间戳是在服务器端编制索引的。
如果您想根据某些消息字段的值查找消息,例如 "validFrom" - 对于大型主题,这将花费一些时间 - 您必须扫描主题中的每条消息。因此,结合使用这两种方法是有意义的。
一些 UI 工具允许您进行这种开箱即用的搜索,看看 Kafka Magic https://www.kafkamagic.com - 它允许使用标准 JavaScript 结合 timestamp/partition/offset 个过滤器。
如果您正在编写自己的解决方案 - 许多语言的标准 Kafka 客户端 SDK 具有按时间戳定位消息的方法 - 将您的消费者指向开始时间戳并逐条阅读消息,直到找到您要查找的内容。这是一个完全有效的方法。