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