是否有意义使用Apache卡夫卡对于这种情况?

是否有意义使用Apache卡夫卡对于这种情况?

问题描述:

有几个应用程序必须集成在一起,他们必须交换问题。所以他们中的一个会解决问题,然后做一些事情,然后改变这个问题的状态。其他可能涉及此问题的应用程序应该获得新的信息。这一直持续到问题达到最终状态结束。问题是必须映射问题,因为这些应用程序并不都支持相同的数据格式。是否有意义使用Apache卡夫卡对于这种情况?

  1. 我不知道是否总是发送整个问题还是只发送新状态作为事件。
  2. 卡夫卡如何支持数据转换?
  3. 如果我的问题有一个附件?(> 5MB)

谢谢你的建议

+0

最好只发送“东西”的更新状态,而不是传递整个“东西”,尤其是“如果“东西”很大,并且消费应用程序不关心状态以外的事情。 – user3366706

是的,它有一定道理。

Kafka可以通过Kafka Streams APIKSQL(它是构建在Kafka流之上的流式SQL引擎)进行转换。

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

  1. 我不知道是否始终发送整个问题还是只发送新状态作为事件。

你可以这样做。如果您发送整个问题,然后将所有后续更新发布为与包含常见kafka消息密钥(可能是唯一问题ID号)的Kafka消息相同的问题,则可以将您的kafka主题配置为压缩主题,代理将自动删除任何较旧的数据副本以节省磁盘空间。

如果您选择只发送增量(更改),那么您需要注意保留期足够长,以便在问题仍然打开并发布更新时,初始完整记录永不过期。默认保留期限为7天。

  1. 如何卡夫卡支持数据转换?
  2. 是的。在Kafka Connect中通过单个消息转换(SMT),或者在Kafka Streams中使用原生Streams代码(在Java中)。

    1. 如果我的问题有一个附件?(> 5MB)
    2. 您可以配置卡夫卡的大消息,但是如果它们比5或10 MB远远大于遵循索赔检查模式并将它们存储在Kafka外部并仅将参考链接发布回外部存储的数据通常会更好,因此消费者可以从Kafka带外获取附件。

    开始=“3”>
开始=>