在 Apache beam 中使用 coGroupByKey 的消费者端行为

Consumer side behavior on using coGroupByKey in Apache beam

我有一个 beam 作业,它从 2 个 kafka 生产者读取数据,并在两个流中使用公共密钥进行连接。我没有使用 kafka 使用的分区键来进行连接。因此,基本上 kafka 通过两个流中的某个键对数据进行分区,我的 consumer/beam 作业从两个流中使用这些数据并提取我希望用来执行加入 pCollection 的实际键,然后我 运行 coGroupByKey .

我看到有几个事件发生了连接,但是如果我查询特定事件,我没有看到发生连接。我在两个流中使用了相同的 window 到 window。这让我怀疑消费者是否从两个流中获取正确的数据来执行此连接。假设消费者 0 从两个流的分区 0 消费。 kafka 是否有可能使用键 x 对数据进行分区,而我的消费者 0 没有获得正确的数据来跨流加入。有人告诉我 coGroupByKey 确保正确的数据到达每个消费者,但我无法想象这一点。使用 coGroupByKey 如何影响输入端行为?

CoGroupByKey 将连接所有输入分区的数据。我怀疑问题出在 windowing——未连接的项目是否在同一个 window 中? (CoGroupByKey 不会跨 windows 加入,因此不会加入单独 windows 中的项目。如果固定 windows 不起作用,您可以查看使用会话 windows .)