我是新的Kafka和数据流和需要一些建议,为以下要求,我们的系统预计将接近100万传入消息每天。消息携带项目标识符。该消息应仅推送到该项目的用户。对于我们的例子,假设我们有项目a、b和c。打开项目a的 Jmeter 板的用户只能看到/接收项目a的消息。
这是我到目前为止关于实现需求解决方案的想法,
消息到达时应该被推送到一个kafka主题,让我们把这个主题称为根主题。将消息推送到根主题后,kafka使用者/侦听器可以读取这些消息,并且可以根据消息中的项目标识符将该消息推送到特定于项目的主题。因此,任何消息都可能以主题a、b或c结尾。考虑使用websockets在消息到达项目用户的 Jmeter 板时更新消息。n个项目主题将有n个使用者/侦听器。这些使用者将特定于项目的消息推送到特定于项目的websocket端点。
请告知我是否可以对上述设计进行任何改进。
这里选择kafka作为消息传递系统,因为它具有高度的可伸缩性和容错性。
在发送到客户机之前,没有复杂的转换或数据充实。使用apache-flink或hazelcast-jet流媒体或kafka流媒体是否有意义对于这个简单的需求来说已经足够了。
另外,我应该什么时候考虑在我的项目中使用hazelcast jet或apache flink。
当我必须在发送给用户之前基于web服务调用或数据库查找更新消息中的一些属性时,我应该使用flink吗?
我应该只在需要内存中的整个数据集来获得属性值时才使用hazelcast jet吗?或者使用jet是否会带来一些好处,甚至对于我上面指定的简单用例。请告知。
2条答案
按热度按时间ruyhziif1#
Kafka流是一个伟大的工具,转换一个Kafka主题到另一个Kafka主题。
您需要的是一个工具,通过websockets将数据从一个kafka主题移动到另一个系统。
流处理器为您提供了一个方便的工具来构建这个数据管道(其中包括到kafka和web套接字的连接器以及可伸缩的、容错的执行环境)。因此,即使不转换数据,也可能需要使用流处理器。
hazelcast jet的好处是它的嵌入式可伸缩缓存层。您可能希望缓存数据库/web服务调用,以便在本地执行扩展,从而减少远程服务调用。
请参阅如何使用jet从kafka读取数据,以及如何将数据写入tcp套接字(而不是websocket)。
lvjbypge2#
我想给你另一个选择。我根本不是Spark/喷气机Maven,但我已经研究了几个星期了。
我将使用pentaho数据集成(kettle)来使用kafka,并编写一个kettle步骤(或用户定义的java类步骤)来将消息写入hazelcast imap。
那么,我们将使用这种方法http://www.c2b2.co.uk/middleware-blog/hazelcast-websockets.php 为最终用户提供WebSocket。