【发布时间】:2021-05-07 02:46:56
【问题描述】:
我正在创建一个 Flink 应用程序,它只是将窗口化的传入 Kafka 事件转发到另一个 Kafka 主题,并为每个窗口添加开始和结束标记 - 例如,对于包含 1, 2, 3, 4, 5 的 1 小时窗口,我将下沉
start_timestamp, 1, 2, 3, 4, 5, end_timestamp 进入另一个 Kafka 主题。以后可能会有一些其他的转换,但一般来说,对于 N 个事件,我总是会发出至少 N+2 个事件。
据我了解,使用windowAll() 和ProcessAllWindowFunction 将注入开始和结束标记应该这样做。
我的问题是关于状态管理的。我将使用 RocksDb 状态后端 - 即使对于这个非键控流,它是否也会保持内部窗口状态?我主要关心的是能够将状态保留在窗口中,这样我就不会再次对其进行重新处理,尤其是对于大窗口。
【问题讨论】:
-
您能否详细说明一下,我不太确定您将状态保留在窗口中是什么意思。
-
假设我的管道只是
stream.map(object -> object.incrField1()).windowAll(1.hour).process(MyProcessor())。然后据我了解, MyProcessor 不断累积为 Iterable的状态将只是原始对象列表,其中 field1 递增。
标签: apache-kafka stream apache-flink apache-kafka-streams flink-streaming