Apache kafka 卡夫卡:主题压缩通知?

Apache kafka 卡夫卡:主题压缩通知?,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我得到了以下我正在努力改进的架构 我收到一个DB更改流,这些更改最终被压缩成一个主题。流基本上是键/值对,键空间很大~4 GB 该主题由一个kafka流进程使用,该进程为每个使用者/碎片分别在RockDB中存储数据。处理器执行两种不同的操作: 将数据加入到另一个流中。 检查主题中的消息是新密钥还是现有密钥的更新。如果是更新,则会将旧的密钥/值和新的密钥/值对发送到不同的主题更新很少。 该构造存在两个问题: 流处理器的两种不同功能属于不同的团队,不应属于同一代码库。它们放在一起是为了节省内存。如果

我得到了以下我正在努力改进的架构

我收到一个DB更改流,这些更改最终被压缩成一个主题。流基本上是键/值对,键空间很大~4 GB

该主题由一个kafka流进程使用,该进程为每个使用者/碎片分别在RockDB中存储数据。处理器执行两种不同的操作:

将数据加入到另一个流中。 检查主题中的消息是新密钥还是现有密钥的更新。如果是更新,则会将旧的密钥/值和新的密钥/值对发送到不同的主题更新很少。 该构造存在两个问题:

流处理器的两种不同功能属于不同的团队,不应属于同一代码库。它们放在一起是为了节省内存。如果我们分开它,我们将不得不复制RockDB。 我更喜欢使用普通的KTable连接,而不是代码中当前手工制作的连接。 如果数据已经保存在主题中,RockDB似乎有点过分了。我们目前遇到了一些性能问题,我想如果我们把所有东西都保存在内存中,速度会更快。 问题1: 有没有一种方法可以连接到压缩主题的压缩过程中?我希望为每个实际压缩的键(包括新旧值)发送一个不同主题的通知。 如果这在某种程度上是可能的,我可以很容易地将代码基分开并简化连接

问题2:
关于如何更优雅地解决这个问题,还有其他想法吗?

您的总体设计是有意义的

关于您的连接语义:我想您需要坚持使用处理器API,因为常规KTable无法提供您想要的。也不可能在压实过程中进行挂钩

但是,Kafka Streams还支持内存中的状态存储:

默认情况下使用RocksDB,以允许状态大于可用主内存。使用RocksDB溢出到磁盘以提高可靠性—但是,它还有一个优点,即如果实例在同一台机器上重新联机,则可以更快地重新创建存储,因为不需要重新读取整个changelog主题

如果你想将应用程序一分为二,你需要自己决定提供多少资源