防止 kafka-streams 中基于密钥的重新分区

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

我有一个有点奇怪的用例,我们的应用程序没有使用标准的 kafka 分区。相反,我们有一个自定义分区策略,我们使用复合键中的特定字段来决定如何分区。这通常是 CustomerId,因此单个客户的所有记录都包含在单个分区中,但是该键还包含使消息唯一的其他 Id,以便压缩仍然有效。

例如

主题 1-键

{
  orderId,
  customerId
}

主题 2-键

{
  addressId,
  customerId
}

我想将这两条记录连接在一起,为了使用 DSL 执行此操作,我唯一的选择是将这两条记录重新设置为客户 ID,然后进行连接。然而,当我这样做时,Kafka-streams 会自动决定发生了密钥更改操作,并为我创建重新分区主题。使用 DSL 时有什么方法可以覆盖此行为吗?

我知道我可以使用处理器 api 和状态存储手动执行此操作,但想知道是否有办法使用 DSL 执行此操作,或者它是否不是一个选项。

apache-kafka apache-kafka-streams kafka-streams-binder
1个回答
0
投票

目前不可能,即 Apache Kafka 3.6 之前。

已经有 WIP 可以添加新的操作员

markAsPartitioned()
来缩小这一差距。 KIP-759 已被接受,并且很可能会随 3.7.0 版本一起发布。

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