考虑实施快速处理数据的流式处理技术
首先
我們已經整理了一個敏捷且易於擴展和變更的微服務架構,根據業務情況。而在近年的數位轉型中,數據利用也在不斷發展。過去,在數據處理方面,大家普遍熟悉的是線上處理和批次處理。主要是使用批次處理來處理大量數據,但現在流式處理的概念也在被廣泛應用,以實現更快的數據處理速度。本文根據文獻《資料導向應用程式設計》整理了有關流式處理的內容。
随着流处理的引入逐渐增多,背景如下
近年的DX中,致力于提供新的用户体验和用户界面等与用户更加贴近的措施,同时,利用数据科学进行各种问题的数据分析也变得流行起来。对于承担DX任务的应用程序来说,导入能够更实时地处理大量生成的数据的技术也成为一个挑战之一。
假设有一个需求,需要通过分析某个主数据来了解顾客和商品的动向,并输出数据,例如在电子商务网站等。在过去的实现中,使用传统技术,将目标期间(例如一天)的数据进行批处理并输出。在这种情况下,了解顾客动向的间隔只能以天为单位进行更新。如果想要更实时地了解顾客动向,就需要实现更短的数据处理间隔。在数字化转型中,需要具备高度敏捷性以更快地满足市场需求的能力。
本次介绍的流处理具有以更短的间隔实时处理数据的特点,从数据生成开始。流处理一直以来用于监测复合事件的发生,但现在也在网页服务等领域被用于实时了解商品趋势,或用于监测仪表板等新的用途。
下面将介绍流处理的概述。
流处理是什么意思?
这是有关流和流处理的概述。
-
- ストリーム
-
- 時間の経過とともに徐々に利用できるようになるデータ
-
- ストリーム処理
- ストリームを連続的に処理するためのアプローチやツール。イベントが発生する度に処理するアプローチ
在中国的本地语言中,有一个选项来解释以下内容:
作为流的发生源,可以使用事件溯源或捕获现有数据库的更改数据。由于涉及到流传输系统的技术,比如消息传递系统等内容,将在接下来的章节中进行解释。
以前,我们在单个机器上处理一段连续时间的数据,并输出数据。然而,流处理的特点是通过将与事件相关的数据分散到多台机器上进行处理,实现大规模处理的技术。
下面,我将描述流处理数据的应用案例。
流处理的实际应用举例
背景之一是在应对商业环境变化时更短的时间内采取措施。下面将提供一些实例说明。
-
- イベント等の変化に合わせたシステムの同期
-
- ストリーム処理で検知したイベントは、そのままではメッセージングシステムに一定時間残り、時間の経過で破棄されます。そのため、導き出されたデータをデータベースなどに永続化します。永続化したデータは、他のサービスから参照させることで新たな機能を追加していきます。
-
- イベントのユーザへのプッシュ
-
- メールやスマホのプッシュ通知などを活用したアラート通知の発信。Webサービスのダッシュボードの表示に必要なイベントの入手。
-
- 複数のストリーム処理の実施
- 上記の2つのような出力の前に複数のストリーム処理を経ることが可能。
如上所述,流式处理一直被用于监控方面,以检测特定事件(警报通知)。例如,在交易系统中检测市场价格的变化,并根据特定规则进行交易,监控制造业工厂内机器的状态,一旦发现异常就能立即确定问题,以及检测信用卡等使用模式的变化以进行欺诈检测等是其典型用例。
最近,由于能够实时处理大量流数据,出现了新的应用场景。通过结合AI技术和流处理等方式,进行分析处理以获得新的价值。
我将介绍一些新的应用示例。
-
- ストリームのデータ分析
-
- ある一定期間のイベントのレートの計測(集計や統計)
-
- (例、直近の5分間における秒あたりの平均問い合わせ数のような統計をリアルタイムに計測、ストリームの分析ツールを使用した分析)
-
- ストリームのデータのリアルタイム検索
-
- ある検索条件を保存し、発生したイベントをすぐにそれらの条件を通して検索
-
- (従来はインデックスを付けたドキュメントの検索)
-
- (例、Webサービスで自分の検索条件を登録し、条件にマッチする物件が出てきたら即時通知をもらう)
-
- ストリーム処理で分析データ(集計など)の最新化
- (例、分析もととなったデータの変更時に変更データでリアルタイムに分析データを最新化)
下面,将描述与流数据的生成源和流的传输系统相关的技术。
流数据的来源
以下是有关于Web服务的后端服务运行所产生的数据流的一些代表性来源。
-
- イベントソーシング
-
- 簡単に説明すると、イベントソーシングはアプリケーションの状態に加えられたすべての変更を変更のイベントログとして記録することです。ストリーム処理はイベントの発生毎にそれらの記録したイベントを対象にして処理していきます。
-
- イベントの例は、”〇〇をキャンセルした”というアプリケーションのイベントの保存。そのイベントに伴いあるテーブルのデータを削除した、あるテーブルに追加したといったデータベースの処理はイベントの発生により起こる作用と説明しています。
-
- 変更データキャプチャ(CDC:change data capture)
- データベースには内部に変更に関するデータが格納されています。変更データキャプチャはデータベース側にストリームの考え方を適用して、データベースに発生した変更データをストリームとしてキャプチャするといった考えです。
流媒体传输系统
描述了用于传送类似于前一章所述的流数据的系统。
批处理等主要是使用保存的文件作为输入并输出数据,而在流处理中,输入是记录事件的消息等。
消息系统是用于管理产生的流数据的机制。
可以直接使用网络将流发送给收件人,但流处理的特点是通过消息系统的消息代理(消息队列)进行流传输。
在消息系统上,数据以事件为单位从源头传输并在应用程序中接收。消息系统上的数据会保留一定时间,并在时间过去后被销毁。此外,消息系统还能够通过多个节点进行处理,实现负载平衡和向多个收件人进行分发的功能。
参考资料:关于流处理的开源软件
最近,各家企業海外范围内纷纷引入以下这些流处理开放源码软件(OSS)。云服务供应商也开始提供与流处理相关的基础设施。
Kafka/Kafka Streams 是一个用于消息传递系统和流处理的库。
Spark Stream 是一个用于在内存中处理接收到的流式数据的库。
各个云服务供应商提供的流处理基础设施。
最后
根据文献中的“数据导向应用设计”,我们整理了流处理。预计在数字转型中,处理的数据类型和数量将增加,数据科学领域的数据分析也将比以往更普及。未来,处理数据的应用程序将增加,并且对实时处理的需求也会增多。考虑到这样的背景,流处理的应用范围也在扩大,看来流处理正在成为数据处理解决方案之一。
参考文章
-
- データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理(Martin Kleppmann, 日本語版2019/7/18)
- 原文 英語版:Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems(Martin Kleppmann, 2017/4/11)