事件流分区与确定性流处理详解
1. 事件流重新分区
事件流的重新分区可通过以下几种方式实现:
- 不同分区数量:增加事件流的分区数量,可提高下游并行性,或使分区数量与其他流匹配以进行共同分区。
- 不同事件键:更改事件键,确保具有相同键的事件被路由到同一分区。
- 不同事件分区器:改变选择事件写入分区的逻辑。
通常,纯无状态处理器很少需要重新分区事件流,除非为提高下游并行性而增加分区数量。无状态微服务可用于重新分区下游有状态处理器消费的事件。分区器算法通常使用哈希函数将事件键确定性地映射到特定分区,保证相同键的事件最终在同一分区。
例如,有一个来自面向Web端点的用户数据流,用户操作转换为事件,事件负载包含用户ID和其他任意事件数据。为确保特定用户的所有数据在同一分区,可对该流进行重新分区。将给定键的所有事件生成到单个分区,为数据局部性奠定基础,消费者只需消费单个分区的事件,就能构建该键相关事件的完整图景,这有助于微服务扩展到多个实例,每个实例消费单个分区,同时维护该键所有事件的完整有状态记录。
2. 事件流共同分区
共同分区是将一个事件流重新分区为具有与另一个流相同分区数量和分区分配逻辑的新流。当一个事件流的键控事件需要与另一个流的事件共置(以实现数据局部性)时,就需要进行共同分区。这对于有状态流处理至关重要,因为许多有状态操作(如流连接)要求给定键的所有事件(无论来自哪个流)都通过同一节点处理。
例如,将重新分区的用户事件流与基于相同ID键控的用户实体流进行连接,两个流具有相同的分区数量,并使用相同的分区器算法进行分区,每个分区的键分布与另一个流匹配,每个连接由各自的消费者实例执行。
超级会员免费看
订阅专栏 解锁全文
7768

被折叠的 条评论
为什么被折叠?



