为应用程序选择合适的流式处理器

\

关键要点

\\
  • 选择一款合适的流式处理器具有一定的挑战性,因为有太多的选择,而最终的选择取决于最终用户的使用场景。\\t
  • 流式SQL提供了更快的应用程序开发速度和高度可维护的部署。\\t
  • 查询编辑环境对开发人员的工作效率有显著的影响,这需要高级图形编辑器和用于流式处理器的调试器。\\t
  • 如果系统需要的吞吐量小于50K事件/秒,那么使用双节点高可用性(HA)部署可节省大量成本。\\t
  • 如果事件速率超出单个流式处理器节点的处理能力,那么就应该将传入事件放入消息代理并启用快照。\
\\

流式处理器是一种软件平台,让用户能够更快地响应传入的数据流(请参阅“什么是流式处理?”)。

\\

在流式处理器上运行的流式应用程序有多种形式。

\\

以下是一些示例:

\\
  1. 检测条件并生成警报(例如,跟踪厨房设备的温度并在超过预定阈值时创建警报);\\t
  2. 计算移动物体的移动平均位置并更新网页(例如,检测人的位置并在地图上绘制他的轨迹);\\t
  3. 检测异常并对其采取行动(例如,检测可疑用户并对其行为进行详细分析)。\

如果你对其他应用程序感到好奇,可以阅读“13 Stream Processing Patterns for Building Streaming and Real-Time Applications”,这篇博文讨论了更多的用例。

\\

正如Quora上的一个问题“What are the best stream processing solutions out there?”所述,有很多流式处理器可供选择。

\\

选择哪一种流式处理器取决于具体用例,本文将讨论如何做出最合适的选择。

\\

我们通过三个步骤来解决这个问题。首先讨论参考架构和流媒体应用程序解析。

\\

然后我们将讨论大多数流式应用程序需要具备的关键功能。

\\

最后,我们将列出用于不同使用场景的可选功能。

\\

流式应用程序参考架构

\\

流式应用程序需要三件组件:数据流、处理数据的处理器和执行决策的代码(参见图1)。

\\

5c8e2b0e7f52ec4ccea7e1829ae1e39a.jpg

\\

图1:流式应用程序参考架构

\\

首先,将从数据源接收到的数据流收集到消息代理的队列中。除非你有特定的要求需要使用不同的设计,否则我们建议你将消息放入消息队列并从消息队列读取消息。在必要的情况下可以重播事件,而且可以简化高可用性(HA)和容错。

\\

流式处理器从消息队列中提取事件,将它们发送到流查询,流查询负责处理数据并生成结果。大多数流式处理器会生成警报、公开或调用API、执行操作以及提供可视化元素。我们以“引言”部分提到的场景为例,就是通过监控室温来检测能源使用的异常情况。应用程序将检测异常,并通过电子邮件发送警报。图2是这个用例的应用程序数据流图。

\\

662c9a971bb77eff2cce1fa952b7e2f5.jpg

\\

图2:用于检测室温异常的流式处理应用程序的架构。

\\

在选择流式处理器时,你需要考虑两种功能:必备功能和可选功能。顾名思义,必备功能就是指肯定会被用到的功能。即使你现在用不到,以后也会用到。你可以根据自己的需要选择可选的功能。本文主要关注必备功能。

\\\\

你应该确保所选的流式处理器支持以下所有功能。

\\

支持使用消息代理进行数据收集

\\

在开发应用程序时,你面临的第一个问题是“应用程序如何从外部数据源接收数据”?答案是使用消息代理,并确保你的流式处理器能够提供支持。大部分流式处理器都提供了这种支持功能。以下是使用消息代理的一些好处:

\\
  1. 立即保存消息。\\t
  2. 消息代理将成为你的高可用端点,而系统的其余部分就不需要高可用。\\t
  3. 如果出现问题,可以重播消息代理中的消息。\\t
  4. 一些可伸缩的消息代理(如Kafka)自动为你处理伸缩性问题。\

关于消息代理的更多优点,请参阅文章“Questioning the Lambda Architecture”和“The Log: What every software engineer should know about real-time data's unifying abstraction”。

\\

流式SQL

\\

第一代流媒体引擎(如Apache StormApache Spark)需要用户编写代码。用户可以将编写的代码放在代理(有时称为actor)中,并将这些代理连接在一起用于收集事件。

\\

虽然这是一种很好的起点,但它需要用户编写代码。容易导致代码重复,并增加了维护成本。

\\

假设你要从数据库获取数据,就需要编写描述如何查找数据的代码。编写流式处理代码并不会好到哪儿去。而在进行批处理时可以不编写代码,可以使用SQL进行查询。我们也可以使用流式分析达到同样的目的,其对应的查询语言被称为流式SQL

\\

以下是流式SQL语言的一些优点:

\\
  • 容易理解,而且很容易招到已经熟悉SQL的开发人员。\\t
  • 它富有表现力、简洁、甜美、速度快。\\t
  • 它定义了涵盖90%问题的核心操作。\\t
  • 流式SQL语言专家可以通过编写扩展来实现特定于应用程序的自定义分析。\\t
  • 查询引擎可以使用流式SQL模型更好地优化查询。\

有了流式SQL,用户无需编写代码就能查询数据。流式SQL平台负责处理数据传输、数据解析,并且提供了连接、窗口和模式之类的操作符。清单1显示了异常检测应用程序的流式SQL代码。

\\

清单1:室温异常检测应用程序

\\
\@App:name(\"High Room Temperature Alert\")\\@App:description('An application which detects abnormal increase of room temperature.')\\@source(type='kafka', @map(type='json'), bootstrap.servers='localhost:9092',topic.list='inputStream',group.id='option_value',threading.option='single.thread')\define stream RoomTemperatureStream(roomNo string, temperature double);\\t\@sink(type='email', @map(type='text'), ssl.enable='true',auth='true',content.type='text/html', username='sender.account', address='sender.account@gmail.com',password='account.password', subject=\"High Room Temperature Alert\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值