我有一个有点奇怪的用例,我们的应用程序没有使用标准的 kafka 分区。相反,我们有一个自定义分区策略,我们使用复合键中的特定字段来决定如何分区。这通常是 CustomerId,因此单个客户的所有记录都包含在单个分区中,但是该键还包含使消息唯一的其他 Id,以便压缩仍然有效。
例如
主题 1-键
{
orderId,
customerId
}
主题 2-键
{
addressId,
customerId
}
我想将这两条记录连接在一起,为了使用 DSL 执行此操作,我唯一的选择是将这两条记录重新设置为客户 ID,然后进行连接。然而,当我这样做时,Kafka-streams 会自动决定发生了密钥更改操作,并为我创建重新分区主题。使用 DSL 时有什么方法可以覆盖此行为吗?
我知道我可以使用处理器 api 和状态存储手动执行此操作,但想知道是否有办法使用 DSL 执行此操作,或者它是否不是一个选项。
目前不可能,即 Apache Kafka 3.6 之前。
已经有 WIP 可以添加新的操作员
markAsPartitioned()
来缩小这一差距。 KIP-759 已被接受,并且很可能会随 3.7.0 版本一起发布。