我正在尝试编写一个 Flink 作业来处理来自单个 Kafka 主题的事件。事件流包含键控事件和批处理事件。键控事件代表事务并具有键 transactionId。这些事件被转换为插入/更新/删除逻辑,但是批处理事件没有事务键,而是由业务条件描述,业务条件转换为与根据条件连接的所有计算事务的最新状态的连接。事件按照主题中的正确顺序出现。
upsert
- 按 transactionid 更新插入
delete
- 通过 transactionid 删除
paid
- 将列表支付状态中代理的所有交易更改为 true
reverse
- 将付款状态列表中代理的所有交易更改为 false
publish
- 更改带有batchid的所有交易是publish true
事件_id | 事件类型 | event_ts | 交易ID | batch_id | 已发布 | 付款[(代理人,付款状态)] | 代理 |
---|---|---|---|---|---|---|---|
1 |
|
2024-01-02 16:14:02 | 436 | 1 | 假 | [(1,假),(2,真)] | 空 |
2 |
|
2024-01-02 16:14:04 | 437 | 1 | 假 | [(3,假),(4,假)] | 空 |
3 |
|
2024-01-02 16:14:05 | 436 | 1 | 假 | [(1,真),(2,假)] | 空 |
4 |
|
2024-01-02 16:14:10 | 空 | 空 | 空 | 空 | [3] |
5 |
|
2024-01-02 16:14:15 | 空 | 空 | 空 | 空 | [3] |
6 |
|
2024-01-02 16:14:20 | 空 | 1 | 空 | 空 | 空 |
.keyBy(transaction id)
键入交易事件流。KeyedBroadcastProcessFunction
来实现所需的逻辑,包括在收到发布事件时生成结果以及清除与batchId匹配的事务事件的状态。有关如何以这种方式使用广播流的详细信息,请参阅 https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/fault-tolerance/broadcast_state/。