【发布时间】:2019-09-28 01:41:48
【问题描述】:
我有以下场景:
- 表 A 和表 B 使用 FK 连接。
- 事务性插入/更新到 A 和 B。
- Debezium 为表 A 发出一个事件
a,为表 B 发出一个事件b。 - Kafka Streams 为表 A 和 B 创建 KStream。
- Kafka Streams 应用程序
leftJoinKStreams A 和 B。(假设a和b记录具有相同的键并落在连接窗口中)。 - 输出记录将为
[a, null], [a, b]。
你如何丢弃[a, null]?
一个选项是执行innerJoin,但在update查询的情况下这仍然是一个问题。
我们尝试使用事件时间戳进行过滤(即使用最新的时间戳保留事件),但不能保证时间戳的唯一性。
即。最终目标是能够识别最新的聚合,以便我们可以在查询时过滤掉中间结果(在 Athena/Presto 或某些 RDBMS 中)。
【问题讨论】:
-
加入后可以
filter()吗?另请注意,支持外键连接的是 WIP atm:cwiki.apache.org/confluence/display/KAFKA/… -
我可以使用
filter,但不想依赖插入始终是事务性的实现细节。考虑两个顺序插入,这将是两个事件,对于 KStream-KStream 连接,它们将输出 2 条记录,而不仅仅是我想要的 1 条。 -
@MatthiasJ.Sax 特别是我想弄清楚在使用 S3 接收器之类的东西时如何识别下游每个键的最新消息。我目前为
eventCreatedAt添加了一个字段,但对于同一事务中的事件,这显然是相同的(并且不保证会增加)。
标签: apache-kafka apache-kafka-streams debezium