流分析架构。我需要哪个经纪人?
Architecture for stream analytics. Which broker I need?
出于研究目的,我正在研究一种架构来进行实时(以及离线)数据分析和语义注释。
我附上了一个基本模式:
我有一些传感器 linked 到 raspberry pi 3。我想可以用像 mosquitto 这样的 mqqt 代理来处理这个 link。
但是,我想在树莓派上收集数据,做点什么,然后将它们转发到商用硬件集群,以使用 Spark 或 Storm(有什么提示吗?)执行实时推理。
然后,这些数据必须存储在 Hadoop 集群可访问的 NoSql 数据库(可能是 Cassandra 或 HBase)中,以对它们执行批处理推理、语义数据丰富并重新存储在同一个数据库中。因此客户可以查询系统以提取有用的信息。
我应该在红色区块中使用哪种技术?
我的想法是针对 MQQT,但 Kafka 可能更适合我的目的?
火花与风暴
Spark 目前是 Spark 和 Storm 之间明显的赢家。至少一个原因是 Spark 能够以高效的方式处理大量数据。 Storm 难以高速处理大量数据。在大多数情况下,大数据社区已经接受了 Spark,至少目前是这样。 Apex 和 Kafka Streams 等其他技术正在流处理中掀起波澜space。
Kafka 生产到 Raspberry Pi
如果您选择 Kafka 路径,请记住,根据我的经验,Kafka 的 Java 客户端是迄今为止最可靠的实现。但是,我会做一个概念验证,以确保不会出现任何内存问题,因为 Rasberry Pi 上没有很多 RAM。
心中的卡夫卡
将 Kafka 保留在您的 RED 盒子中将为您提供一个非常灵活的架构,因为任何进程:Storm、Spark、Apex、Kafka Streams、Kafka Consumer 都可以连接到 Kafka 并快速读取数据。将 Kafka 置于架构的核心可为您提供所有数据的 "distribution" 点,因为它速度非常快,但也允许数据永久存储在那里。请记住,您无法查询 Kafka,因此使用它需要您尽可能快地读取消息以填充其他数据存储或执行流式计算。
使用 Apache Nifi?
怎么样
有一个 article describing the use case very similar to yours. To output your data to HDFS you can use PutHDFS or PutHiveQL, then use Hive LLAP 可以为您的客户提供对数据的访问。
使用 Apache Nifi,您可以在零(或几乎零)开发的情况下非常快速地交付工作原型。
您可能会在系统的产品化步骤中花费更多时间进行性能调优、部署和定制,但这部分对于任何开源工具都是强制性的。
您可以针对您的用例评估 Apache Apex,因为它可以满足您的大部分要求。 Apache Apex 还附带 Apache Malhar 项目,该项目为 Apache Apex 提供运算符库。由于您决定使用 MQTT 协议,Apache Malhar 还预建了 AbstractMQTTInputOperator/AbstractMQTTOnputOperator,您可以对其进行扩展,并将其用作输入代理。 Malhar 还带有各种操作符,可以连接到不同的 NoSQL 数据库以及转储到 HDFS。 Apache Apex 在您提议的架构中可能不需要 kafka。当您想将数据推送到 Hadoop 时,Hadoop 原生 Apex 实际上可以显着减少我们的部署工作量。
我遇到的另一个有趣的项目是 Apache Edgent,它可以帮助您在边缘设备上执行一些实时分析。
PS:我是 Apache Apex/Malhar 项目的贡献者。
出于研究目的,我正在研究一种架构来进行实时(以及离线)数据分析和语义注释。 我附上了一个基本模式: 我有一些传感器 linked 到 raspberry pi 3。我想可以用像 mosquitto 这样的 mqqt 代理来处理这个 link。 但是,我想在树莓派上收集数据,做点什么,然后将它们转发到商用硬件集群,以使用 Spark 或 Storm(有什么提示吗?)执行实时推理。 然后,这些数据必须存储在 Hadoop 集群可访问的 NoSql 数据库(可能是 Cassandra 或 HBase)中,以对它们执行批处理推理、语义数据丰富并重新存储在同一个数据库中。因此客户可以查询系统以提取有用的信息。
我应该在红色区块中使用哪种技术? 我的想法是针对 MQQT,但 Kafka 可能更适合我的目的?
火花与风暴
Spark 目前是 Spark 和 Storm 之间明显的赢家。至少一个原因是 Spark 能够以高效的方式处理大量数据。 Storm 难以高速处理大量数据。在大多数情况下,大数据社区已经接受了 Spark,至少目前是这样。 Apex 和 Kafka Streams 等其他技术正在流处理中掀起波澜space。
Kafka 生产到 Raspberry Pi
如果您选择 Kafka 路径,请记住,根据我的经验,Kafka 的 Java 客户端是迄今为止最可靠的实现。但是,我会做一个概念验证,以确保不会出现任何内存问题,因为 Rasberry Pi 上没有很多 RAM。
心中的卡夫卡
将 Kafka 保留在您的 RED 盒子中将为您提供一个非常灵活的架构,因为任何进程:Storm、Spark、Apex、Kafka Streams、Kafka Consumer 都可以连接到 Kafka 并快速读取数据。将 Kafka 置于架构的核心可为您提供所有数据的 "distribution" 点,因为它速度非常快,但也允许数据永久存储在那里。请记住,您无法查询 Kafka,因此使用它需要您尽可能快地读取消息以填充其他数据存储或执行流式计算。
使用 Apache Nifi?
怎么样有一个 article describing the use case very similar to yours. To output your data to HDFS you can use PutHDFS or PutHiveQL, then use Hive LLAP 可以为您的客户提供对数据的访问。
使用 Apache Nifi,您可以在零(或几乎零)开发的情况下非常快速地交付工作原型。 您可能会在系统的产品化步骤中花费更多时间进行性能调优、部署和定制,但这部分对于任何开源工具都是强制性的。
您可以针对您的用例评估 Apache Apex,因为它可以满足您的大部分要求。 Apache Apex 还附带 Apache Malhar 项目,该项目为 Apache Apex 提供运算符库。由于您决定使用 MQTT 协议,Apache Malhar 还预建了 AbstractMQTTInputOperator/AbstractMQTTOnputOperator,您可以对其进行扩展,并将其用作输入代理。 Malhar 还带有各种操作符,可以连接到不同的 NoSQL 数据库以及转储到 HDFS。 Apache Apex 在您提议的架构中可能不需要 kafka。当您想将数据推送到 Hadoop 时,Hadoop 原生 Apex 实际上可以显着减少我们的部署工作量。
我遇到的另一个有趣的项目是 Apache Edgent,它可以帮助您在边缘设备上执行一些实时分析。
PS:我是 Apache Apex/Malhar 项目的贡献者。