在此场景中使用 Apache Kafka 是否有意义?

Does it make sense to use Apache Kafka for this Scenario?

有几个应用程序必须集成在一起,它们必须交换问题。所以他们中的一个会得到这个问题,然后做一些事情,然后再改变这个问题的状态。并且可能涉及此问题的其他应用程序应该获得新信息。这一直持续到问题达到最终状态 Closed。问题是必须映射问题,因为这些应用程序并不都支持相同的数据格式。

  1. 我不确定是始终发送整个问题还是仅将新状态作为事件发送。
  2. Kafka是如何支持数据转换的?
  3. 如果我的问题有附件怎么办?(>5MB)

感谢您的建议

是的,它确实有道理。

Kafka 可以通过 Kafka Streams API, and KSQL 进行转换,后者是构建在 Kafka Streams 之上的流 SQL 引擎。

通常 Kafka 用于较小的消息;对于较大的内容,要考虑的一种模式是将其存储在对象存储中(例如 S3,或类似的,具体取决于您选择的体系结构)并在您的 Kafka 消息中引用指向它的指针。

  1. 我不确定是始终发送整个问题还是仅将新状态作为事件发送。

这两种方法都可以。如果您发送整个 Issue,然后将所有后续更新发布到与 Kafka 消息相同的问题,其中包含一个通用的 kafka 消息密钥(可能是一个唯一的问题 ID 号),那么您可以将您的 kafka 主题配置为压缩主题,代理将自动删除数据的所有旧副本以保存磁盘 space.

如果您选择仅发送增量(更改),那么您需要注意保持足够长的保留期,以便在问题仍未解决并发布更新时初始完整记录永远不会过期。默认保留期为 7 天。

  1. Kafka是如何支持数据转换的?

是的。在 Kafka Connect 中通过单消息转换 (SMT),或在 Kafka Streams 中使用本机 Streams 代码(Java)。

  1. 如果我的问题有附件怎么办?(>5MB)

您可以为大型消息配置 kafka,但如果它们远大于 5 或​​ 10 MB,那么通常最好遵循声明检查模式并将它们存储在 Kafka 外部,然后只发布引用 link到外部存储的数据,以便消费者可以从 Kafka 带外检索附件。