用于在 GB 规模(流式和静态)数据集上查询和警报的技术堆栈
Posted
技术标签:
【中文标题】用于在 GB 规模(流式和静态)数据集上查询和警报的技术堆栈【英文标题】:Tech-stack for querying and alerting on GB scale (streaming and at rest) datasets 【发布时间】:2018-10-02 16:00:08 【问题描述】:尝试确定一个涉及数据摄取和分析的项目,并可以使用一些关于工具和软件的建议。
我们有传感器创建包含 2-3 个字段的记录,每个字段每秒产生约 200 条记录(约 2kb/秒),每分钟将它们发送到远程服务器一次,从而产生约 1800 万条记录和 200MB每个传感器每天的数据。不确定我们需要多少传感器,但可能会从个位数开始。
我们需要能够对最近的数据(不确定时间段猜测不到 1 天)采取行动(警报),以及对过去的数据运行查询。我们想要可扩展且相对稳定的东西。
正在考虑使用弹性搜索(然后可能使用 x-pack 或 sentinl 进行警报)。也考虑过 Postgres。 Kafka 和 Hadoop 绝对是矫枉过正。我们在 AWS 上,因此我们也可以使用 kinesis 等工具。
问题是,什么样的软件/架构适合这项工作?
【问题讨论】:
我会考虑 Cassandra 或 Elasticsearch。两者都可以有效地处理时间序列数据; Elastic stack 有很好的可视化/数据分析工具,而 C* 在存储方面有其优势。 【参考方案1】:您是否与您的 AWS 解决方案架构师讨论过该使用案例?他们喜欢这种东西,他们会很乐意帮助您找出正确的架构。它可能很适合AWS IoT services?
如果您不使用托管 IoT 服务,则需要将消息推送到 Kafka 或 Kinesis 等可扩展队列(IMO,如果您每天处理 18M * 5 个传感器 = 90M 事件,那就是 >每秒 1000 个事件。Kafka 在这里并不过分;许多其他堆栈将 under-kill)。
然后,您可以从 Kinesis 将数据流入更快的堆栈以进行分析/查询,例如 HBase、Cassandra、Druid 或 ElasticSearch,具体取决于您团队的偏好。有人会说这是时间序列数据,所以您应该使用time series database,例如 InfluxDB;但同样,这取决于你。只要确保它是一个在每秒 1000 次写入的稳定负载下表现良好(并且表现良好!)的数据库。我不建议为此使用 RDBMS,甚至不建议使用 Postgres。上面提到的应该都处理好了。
此外,即使您不打算永久保留消息,也不要忘记将消息从 Kinesis 流向 S3 以确保安全(如果是这种情况,只需设置生命周期规则以从存储桶中删除旧数据)。毕竟,这是大数据,规则是“一切都在中断,一直”。如果您的分析堆栈崩溃,您可能不想完全丢失数据。
至于警报,这取决于 1) 您为分析部分选择的堆栈,以及 2) 您要使用哪种触发器。根据您的描述,我猜您很快就会想要构建更高级的触发器,例如用于异常检测的机器学习模型,为此您可能想要一些不轮询分析堆栈而是直接消耗事件的东西运动。
【讨论】:
以上是关于用于在 GB 规模(流式和静态)数据集上查询和警报的技术堆栈的主要内容,如果未能解决你的问题,请参考以下文章