【发布时间】:2018-04-06 02:47:27
【问题描述】:
我得到了以下我正在尝试改进的架构。
我收到一个数据库更改流,最终形成一个压缩主题。流基本上是键/值对,键空间很大(~4 GB)。
主题由一个 kafka 流进程消费,该进程将数据存储在 RockDB 中(每个消费者/分片分开)。处理器做了两个不同的事情:
- 将数据加入另一个流。
- 检查来自主题的消息是新密钥还是现有密钥的更新。如果是更新,它会将旧的键/值和新的键/值对发送到不同的主题(更新很少)。
这个结构有几个问题:
- 流处理器的两种不同功能属于不同的团队,不应属于同一代码库。它们被放在一起以节省内存。如果我们将其分开,我们将不得不复制 RockDB。
- 我更喜欢使用普通的 KTable 连接,而不是当前代码中的手工连接。
- 如果数据已经保存在主题中,RockDB 似乎有点矫枉过正。我们目前遇到了一些性能问题,我认为如果我们将所有内容都保存在内存中会更快。
问题 1: 有没有办法挂钩压缩主题的压缩过程?对于实际压缩的每个键(包括旧值和新值),我想要一个通知(到不同的主题)。 如果这是可能的,我可以轻松地将代码库分开并简化连接。
问题 2: 关于如何更优雅地解决此问题的任何其他想法?
【问题讨论】:
标签: apache-kafka apache-kafka-streams