1

我是 Kafka 和数据流的新手,需要一些建议来满足以下要求,我们的系统预计每天有近 100 万条传入消息。该消息携带项目标识符。该消息应仅推送给该项目的用户。对于我们的案例,假设我们有项目 A、B 和 C。打开项目 A 的仪表板的用户只能看到/接收项目 A 的消息。

到目前为止,这是我对实现需求解决方案的想法,

消息应该在到达时被推送到 Kafka 主题,让我们将此主题称为根主题。消息一旦推送到根主题,可以由 Kafka 消费者/侦听器读取,并且基于消息中的项目标识符可以将该消息推送到项目特定主题。因此,任何消息都可以在主题 A 或 B 或 C 处结束。考虑使用 websockets 在消息到达项目用户的仪表板时对其进行更新。N 个项目主题将有 N 个消费者/听众。这些消费者会将项目特定的消息推送到项目特定的 websocket 端点。

请告知我是否可以对上述设计进行任何改进。

此处选择 Kafka 作为消息传递系统,因为它具有高度可扩展性和容错性。

在发送到客户端之前,没有复杂的转换或数据丰富。使用 Apache Flink 或 Hazelcast Jet 进行流式传输是否有意义,或者 Kafka 流式传输足以满足这个简单的要求。

另外,我什么时候应该考虑在我的项目中使用 Hazelcast Jet 或 Apache Flink。

当我必须在将消息发送给用户之前基于 Web 服务调用或数据库查找更新消息中的几个属性时,我应该使用 Flink 吗?

只有当我需要内存中的整个数据集来获得属性值时,我才应该使用 Hazelcast Jet吗?或者即使对于我上面指定的简单用例,使用 Jet 也会带来一些好处。请指教。

4

2 回答 2

1

Kafka Streams 是将一个 Kafka 主题转换为另一个 Kafka 主题的好工具。

您需要一个工具,通过 Web 套接字将数据从 Kafka 主题移动到另一个系统。

流处理器为您提供了一个方便的工具来构建这个数据管道(以及其他连接到 Kafka 和 Web 套接字以及可扩展、容错的执行环境)。因此,即使您不转换数据,您也可能希望使用流处理器。

Hazelcast Jet 的好处是它嵌入了可扩展的缓存层。您可能希望缓存您的数据库/Web 服务调用,以便在本地执行丰富,从而减少远程服务调用。

了解如何使用 Jet从 Kafka 读取数据以及如何将数据写入TCP 套接字(不是 websocket)。

于 2018-01-30T12:42:05.773 回答
0

我想给你另一种选择。我根本不是 Spark/Jet 专家,但我已经研究了几个星期。

我会使用Pentaho Data Integration(kettle)从 Kafka 中消费,我会编写一个kettle 步骤(或用户定义的 Java 类步骤)来将消息写入 Hazelcast IMAP。

然后,将使用这种方法http://www.c2b2.co.uk/middleware-blog/hazelcast-websockets.php为最终用户提供 Websocket。

于 2018-01-31T09:06:53.060 回答