我们目前正在设计一个大数据处理链。我们目前正在研究NiFi/MiNiFi来接收数据,进行一些规范化,然后导出到数据库。在标准化之后,我们计划分叉数据,这样我们就可以有一个实时feed,客户可以使用不同的过滤器使用它。
我们查看NiFi和/或Kafka向客户机发送数据,但它们都存在设计问题。
使用NiFi,我们正在考虑添加一个websocket服务器,该服务器侦听新连接并将其筛选器添加到自定义的有状态处理器块中。如果与用户筛选器匹配,则该块将筛选数据并用适当的套接字id对其进行标记,然后生成X个要发送到匹配客户端的流文件。这一部分看起来是可行的,但是我们也希望能够在客户端连接短时间断开的情况下对数据进行排队。
作为另一种选择,我们正在研究卡夫卡,但它似乎不支持动态连接客户端数量的想法。如果我们使用kafka流来过滤数据,那么每个客户端需要一个主题?这可能最终会超过我们的动物园管理员实例。或者我们可以使用NiFi进行过滤,然后插入到不同的分区中,就像这样:
Kafka work queue with a dynamic number of parallel consumers
. 但是对支持的分区数量仍然有限制,对吗?更不用说,当我们上下缩放时,我们将不得不让生产者和消费者从正确的分区中读取数据。
我是不是因为妮菲还是卡夫卡而错过了什么?或者还有其他项目我应该考虑为这个过滤数据发送?