繁体   English   中英

从 Kafka 键值状态存储中驱逐数据

[英]Eviction of data from Kafka key value state store

我正在使用 kafkaStreams 执行聚合,它实际上将所有聚合记录保存到 keyValue 状态存储中,针对我生成的特定键来唯一标识该聚合。 我没有使用任何 kafka 窗口进行此聚合。 所以本质上这种方法将继续监听输入数据,从而继续聚合。 现在基于密钥,我需要应用不同的逻辑从 stateStore 搜索并将我的数据移动到下游。

Kafka 的 KeyValueStateStore 给了我 4 种方法,即 all、prefixScan、range 和 get。 其中基于我生成的密钥,我发现我只能使用所有并获取。

  1. 如果我使用 get,kafka 将在内部扫描完整的 statestore 并为我提供特定键的数据,所以如果我有一个键列表,它将遍历完整的 statestore 以获取列表中的键数。
  2. 如果我设法为我的搜索键创建一个正则表达式,我可以使用 all() 并在 java 逻辑中遍历 statestore 中的所有数据,然后搜索我的正则表达式并移动到下游。 但同样,这将是对整个 statestore 的手动迭代。

PS 在任何时候,我的 statestore 都将包含至少十亿条记录。

有人可以建议使用键搜索到 kafka keyValue stateStore 来检索数据的最佳(性能方面)可能的方法。 或该方法的任何替代方法都值得赞赏。

更新:从 statestore 中逐出数据后,我不会删除它,而是希望使用表明是否已被逐出的标志来更新它。 这只能通过对 statestore 的读/写访问来实现,而 statestore 又只能通过管道获得,因为交互式查询只提供对 statestore 的读访问。 这就是我对卡夫卡的了解。 否则请帮忙。

我认为您应该使用 Apache Spark 流式传输来使用它

  1. 通过火花流从 Kafka 读取数据
  2. 在 spark 中执行聚合/转换
  3. 将净化后的数据推送到所需的下游主题中

我不确定这是否可以在 Kafka 中完成

暂无
暂无

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

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