我是Kafka和数据流的新手,需要一些关于以下要求的建议, 我们的系统预计每天有近 100 万条传入消息。该消息带有项目标识符。消息应仅推送给该项目的用户。对于我们的案例,假设我们有项目 A、B 和 C.打开项目 A 仪表板的用户只能看到/接收项目 A 的消息。
这是我到目前为止关于实现需求解决方案的想法,
消息到达时应推送到 Kafka 主题,我们将此主题称为根主题。消息一旦推送到根主题,就可以由 Kafka 消费者/侦听器读取,并且根据消息中的项目标识符可以将该消息推送到项目特定的主题。因此,任何消息都可能最终出现在主题 A 或 B 或 C.考虑使用 websocket 在消息到达项目用户仪表板时更新消息。N 个项目主题将有 N 个使用者/侦听器。这些使用者会将项目特定的消息推送到项目特定的 websocket 端点。
请告知我是否可以对上述设计进行任何改进。
在这里选择 Kafka 作为消息传递系统,因为它具有高度可扩展性和容错性。
在将其发送到客户端之前,无需进行复杂的转换或数据扩充。使用Apache Flink或Hazelcast Jet进行流媒体播放是否有意义,或者Kafka流媒体足以满足这个简单的要求。
另外,我什么时候应该考虑在我的项目中使用Hazelcast Jet或Apache Flink。
当我必须在将消息发送给用户之前根据 Web 服务调用或数据库查找更新消息中的几个属性时,我应该使用 Flink 吗?
我是否应该仅在需要内存中的整个数据集才能达到属性值时才使用 Hazelcast Jet? 或者即使对于上面指定的简单用例,使用 Jet 也会带来一些好处。请指教。
Kafka Streams是将一个Kafka主题转换为另一个Kafka主题的绝佳工具。
您需要的是一个通过 Web 套接字将数据从 Kafka 主题移动到另一个系统的工具。
流处理器为您提供了一个方便的工具来构建此数据管道(其中包括与 Kafka 和 Web 套接字的连接器以及可扩展的容错执行环境)。因此,即使您不转换数据,也可能希望使用流处理器。
Hazelcast Jet的好处是它嵌入了可扩展的缓存层。您可能希望缓存数据库/Web 服务调用,以便在本地执行扩充,从而减少远程服务调用。
了解如何使用 Jet 从 Kafka 读取以及如何将数据写入 TCP 套接字(不是 websocket)。
我想给你另一个选择。我根本不是Spark/Jet专家,但我已经研究了几个星期。
我会使用 Pentaho Data Integration(kettle) 从 Kafka 消费,我会写一个 kettle 步骤(或用户定义的 Java 类步骤)将消息写入 Hazelcast IMAP。
然后,http://www.c2b2.co.uk/middleware-blog/hazelcast-websockets.php 使用此方法为最终用户提供 Websocket。