基于 XSLT 的转换 "service" 在 Apache Kafka 之上

XSLT based transformation "service" on top of Apache Kafka

在我写这个问题的时候,(还)没有任何问题同时标记有 [apache-kafka] 和 [xslt]。

我是一个 "classic" 面向消息的中间件(BizTalk、TIBCO 等),刚刚发现 Kafka 及其令人印象深刻的性能数据!

然后,我想知道 "Kafka-community" 关于如何在发布和消费之间转换消息负载的建议...

确实,在我的集成世界中,生产者公开的数据结构(即格式)通常与消费者期望的数据结构(格式)完全不同。例如,作为生产者,我可能有一个大型机应用程序在 COBOL copybook 结构中格式化数据,而我的前端应用程序想要使用现代 JSON 格式。

[根据@morganw09dev 的第一个回答更新]

我喜欢@morganw09dev 的提议,但我有点 "annoyed" 创建特定于消费者的主题。我看到 "Topic B"(请参阅@morganw09dev 的第一个答案)作为我的前端应用程序的特定主题,以便使用来自 "Topic A" 的信息。换句话说,这种特殊性使 "Topic B" 成为一个队列 ;-) 这很好,但我想知道这样的设计是否不会 "hurt" 一个 Kafka-native ;-)

根据我对 Kafka 的初步阅读,很明显我还应该更多地了解 Storm...但是,然后,我发现 Flink,根据 https://flink.apache.org/features.html 上的图表,看起来更多性能优于 Storm,现在 @morganw09dev 提到了 Samza!这意味着我不知道从哪里开始 ;-)

最终,我想在 XSLT 中编写我的转换代码,并且在 Java 世界中,我认为 Saxon 是领先的 XSLT 处理器之一。你知道 "integration" Saxon 的 Storm、Flink 或 Samza 吗?或者,也许我的问题没有意义,我必须找到另一个 "way" 才能将 Saxon 与 Kafka 结合使用。

在我写这篇评论的时候,(还)没有任何问题同时标记有 [saxon] 和任何 [apache-kafka]、[apache-storm]、[apache-flink] and/or [apache-samza].

Kafka 本身不能用于转换数据。它仅用于存储稍后使用的数据。

一个想法是拥有一个三部分架构。

Kafka Topic A => Transformer => Kafka Topic B

按照你的例子。您的生产者将 COBOL 相关数据推送到 Kafka 主题 A。您的转换器从主题 A 读取数据,进行必要的转换,然后将 JSON 输出到主题 B。一旦进入主题 B,前端应用程序就可以以其首选格式读取它.如果你走那条路,Transformer 可以使用 Kafka 的默认消费者和生产者自定义构建,或者使用 Apache Samza or Apache Storm 之类的流式框架来帮助处理消息传递。 Samza 和 Kafka 最初都是在 LinkedIn 开发的,我相信可以很自然地一起工作。 (虽然我从未尝试过 Samza)。