繁体   English   中英

Java Kafka 消费者商店 state 在 memory?

[英]Java Kafka Consumer store state in memory?

我有一个用例,我需要为客户“批处理”事件数据。

每条事件数据都会有一个 customerId。

在我的应用程序层 (java) 中,我需要对每个客户 ID 的所有事件进行批处理,然后应用我的业务逻辑。 我的业务逻辑需要每个客户的所有事件都可用。 基本上,我先按 customerId 分组,然后才能对其进行任何操作。

方法:将所有事件提取到分区键为 "customerId"的 Kafka 主题。 因此,属于特定客户的事件总是会发送给同一个消费者。 在消费者中,我可以收集 memory 中的事件(也许使用一个简单的过期时间 map 左右)并进行批处理。 在这种方法中,我的整个批次都是暂时的,并存储在应用程序 memory 中。

注意事项:当 Kafka 分区重新平衡时(无论出于何种原因)以及当不同的分区被重新分配给不同的消费者时,数据变得不一致。 不确定是否有任何方法可以克服它。

我想知道这种“批处理”用例的实用方法是什么? Kafka-Streams 是合适的人选吗? 但这不是无限的 stream。批处理数据集显然有起点和终点。 结束事件用作执行业务逻辑的触发器。

事件将按 customerId排序,但在消费者实例中没有 StickyAssignor,它们不会 “去” 被同一消费者消费,尤其是在分布式环境中发生替换时

如果你在一个紧凑的主题中有一些数据作为你的原始事件,并将它们全部消耗到一些缓存中将构建你的物化视图,那么这就是 Kafka Streams 对变更日志主题所做的,是的。 您还可以使用普通消费者自行构建此逻辑,就像 Confluent Schema Registry 使用其_schemas主题和多个内部哈希图所做的那样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM