我获得了以下我想要改进的架构。
我收到了一系列数据库更改,最终出现在一个压缩的主题中。流基本上是键/值对,键空间很大(约4 GB)。
该主题由一个kafka流进程使用,该进程将数据存储在RockDB中(对于每个使用者/分片而言是分开的)。处理器做了两件事:
该构造有几个问题:
问题1: 有没有办法挂钩压缩主题的压缩过程?我想为每个实际压缩的密钥(包括旧值和新值)发出通知(针对不同的主题)。 如果这在某种程度上是可能的,我可以轻松地拆分代码库并简化连接。
问题2: 关于如何更优雅地解决这个问题的任何其他想法?
答案 0 :(得分:1)
你的整体设计很有意义。
关于你的连接语义:我想你需要坚持使用Processor API,因为常规KTable
无法满足你的需要。它也不可能进入压实过程。
但是,Kafka Streams还支持内存状态存储:https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html#state-stores
默认情况下使用RocksDB,以允许状态大于可用的主内存。使用RocksDB将磁盘扩散到可靠性 - 然而,它还具有以下优点:如果实例在同一台计算机上重新联机,则可以更快地重新创建存储,因为它不需要重新读取整个更改日志主题
如果您想将应用分成两部分,您自己决定要提供多少资源。