CN113312210B - 一种流式处理系统的轻量级容错方法 - Google Patents
一种流式处理系统的轻量级容错方法 Download PDFInfo
- Publication number
- CN113312210B CN113312210B CN202110589994.5A CN202110589994A CN113312210B CN 113312210 B CN113312210 B CN 113312210B CN 202110589994 A CN202110589994 A CN 202110589994A CN 113312210 B CN113312210 B CN 113312210B
- Authority
- CN
- China
- Prior art keywords
- task
- fault
- backup
- state
- chain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Hardware Redundancy (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明通过网络技术领域的方法,实现了一种流式处理系统的轻量级容错方法。分为无故障运行阶段和故障恢复阶段;无故障运行阶段将流式处理系统中的有状态任务组织成多条链式结构,以多个任务连成一条链,链上的每一个任务都周期性地采用链式地将状态增量的同步方法,结合上游备份机制和冗余消息去重机制,向其备份任务同步任务状态;故障恢复阶段在故障发生时,将故障任务切换到其链上的备份任务,备份任务启动计算逻辑准备计算,在完成状态同步后,将计算切换到主任务。这一方法在无故障运行时,容错开销比较小,同时资源耗费较少,故障恢复的过程满足毫秒级且不会造成数据的明显的更新停滞和回滚现象。
Description
技术领域
本发明涉及网络技术领域,尤其涉及一种流式处理系统的轻量级容错方法。
背景技术
大数据的计算模式主要分为批处理计算和流处理计算。其中流处理计算因为其低延迟的特性被广泛应用。流式计算可以在更短的时间内挖掘数据的价值,持续不断的接收数据进行处理。目前先进的流式处理系统其处理延迟可以达到数百毫秒级。
因为数据和处理往往是分开,流式处理系统自然而然地以分布式系统为主。而分布式系统因为软硬件等各种原因难以避免故障的发生,使得流式系统的故障处理成为至关重要的一环。当前流式系统的故障处理有三种主要方式:备份机制、检查点机制以及血缘机制。其中大多数系统采用检查点和备份机制。
很多场景下,对于故障发生后的恢复时间有较为严格的要求,比如某些实时展示数据的场景,而检查点机制的状态恢复相比于正常数据处理往往需要较长时间,难以支撑这类场景,备份机制所需的资源往往翻倍。血缘机制仅限于Apache Spark Streaming这种基于微批处的流式处理系统,而不适用于原生的流处理系统。
鉴于当前海量的互联网数据,流式系统对于延迟的要求越来越严格,以大屏数据展示为例,这种场景往往有三个要求:
1.实时更新展示数据,数百毫秒级;
2.数据最终一致性,需要exactly once语义支持;
3.发生故障时大屏数据更新不能停滞,出现数据回滚。
业界普遍采用同时在不同机房建立主备链路,保证机房资源充足以及运行环境的稳定。当主链路发生故障的时候,切换大屏展示数据至正常的辅助链路。
问题在于流式系统的检查点算法是全局的,所以单一任务故障会导致系统整体从上一个快照恢复,从而导致数据更新停滞和数据回滚。同时,主备链路方法有比较严重的高可用和稳定性隐患,同时也不属于通用引擎的解决方案,对业务架构和环境有严重依赖。因此我们提出了一种轻量级容错技术,旨在平衡资源耗费和恢复时间两个问题,能够实现更快的故障恢复和更少的资源需求。
发明内容
为此,本发明首先提出一种流式处理系统的轻量级容错方法,分为两个阶段:无故障运行阶段和故障恢复阶段;
所述无故障运行阶段,将流式处理系统中的有状态任务组织成多条链式结构,以K个任务连成一条链,其中K为用户指定的容错参数,链上的每一个任务都周期性地采用链式地将状态增量的同步方法,结合上游备份机制和冗余消息去重机制,向其备份任务同步任务状态;所述故障恢复阶段在故障发生时,将故障任务切换到其链上的备份任务,备份任务启动计算逻辑准备计算,同时上游任务将备份输出恢复到上一次检查点的偏移,并向下游发送备份的输出数据,备份任务重新消费上游输出并向下游输出,恢复流式计算,同时原地重启主任务并接管原有状态后端rocksdb的状态,若无法原地重启,则在其他机器上重启,此时该状态为空,然后将其挂到备份任务的链尾,然后主任务通过其前序任务,进行状态追赶,当完成状态同步后,在备份任务接收到检查点消息时,并完成状态同步后,将重启的主任务重新恢复成链头,并将计算切换到主任务。
所述状态增量的同步方法为:在更新自己的状态,将状态更新追加到changelog中,当收到检查点消息时,则对changelog进行冗余更新去除,即对于同一个状态的多次更新,只保留最后一次更新,然后对changelog进行无损压缩;之后将压缩后的changelog发送到链上的备份任务并等待确认,当收到备份任务的确认后即完成状态同步;备份任务收到changelog后,向其备份任务转发,并将changelog回放并应用到rocksdb,再收到备份任务的确认消息后向前序任务发送确认消息;若备份任务为尾任务,在应用到rocksdb后直接向前序任务发送确认消息。
所述上游备份机制为:当故障发生时,只将故障任务切换到备份任务,并重新消费上游备份的输出,在正常运行过程中,任务向下游发送自己的输出后,并不清理本地的这些输出数据,而是缓存下来,并在收到快照消息的时候,记录当前的输出的偏移,当下游任务完成状态同步后,会向上游发送清理输出的消息,此时上游任务清理掉偏移之前缓存的输出数据以减少内存占用。
所述冗余消息去重机制为:给每个消息都编上全局唯一的ID,并在每个任务中用rocksdb维护一个已处理消息ID的集合,当检测到消息ID在这个集合中的时候,则直接丢弃不进行处理,为了加快检测速度,采用布隆过滤器进行过滤,当布隆过滤器命无法判断的时候再访问rocksdb进行确定,为了减少资源占用,定期清理布隆过滤器。
所述后端是内存或者rocksdb。
所述状态更新为增加,删除,改变。
所述无损压缩采用LZ、LZW或Snappy算法。
取K=3。
本发明所要实现的技术效果在于:
本发明通过实现一种新的流式处理系统容错机制,避免发生错误恢复状态时的数据回滚和数据处理停滞现象,实现以下两点:
1.在无故障运行时,容错开销比较小,同时资源耗费较少;
2.故障恢复的过程满足毫秒级且不会造成数据的明显的更新停滞和回滚现象。
具体实施方式
以下是本发明的优选实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于此实施例。
本发明提出了一种流式处理系统的轻量级容错方法,分为两个阶段,分别是无故障运行阶段和故障恢复阶段。
首先,我们将流式处理系统中的有状态任务组织成多条链式结构,每K个任务连成一条链。在无故障运行阶段,链上的每一个任务都周期性地向其备份任务同步任务状态,其中K为用户指定的容错参数,一般取K=3。在故障恢复阶段,我们快速将故障任务切换到其链上的备份任务,并重新消费上游任务的备份输出,恢复流式计算。
无故障运行阶段
在无故障运行阶段,我们利用流式系统中流式检查点的机制,不同的时检查点技术中任务在接收到检查点消息后将自己的状态写入到持久化存储中,而本技术则链式地将状态增量的同步到链上的备份任务直到链尾任务。备份任务拥有主任务的计算逻辑但无故障运行时不进行计算,只做状态同步,为了降低内存占用,备份任务采用rocksdb,一种基于磁盘的键值数据库,作为状态存储后端,。
(1)基于changelog的增量状态同步
在无故障运行时,任务通过只追加的changelog来记录任务状态的变化。在更新自己的状态(后端可能是内存或者rocksdb),将状态更新(如增加,删除,改变)追加到changelog中,当收到检查点消息时,则对changelog进行冗余更新去除,即对于同一个状态的多次更新,只保留最后一次更新,然后对changelog进行无损压缩,可采用LZ、LZW、Snappy等算法。之后将压缩后的changelog发送到链上的备份任务并等待确认,当收到备份任务的确认后即完成状态同步。备份任务收到changelog后,向其备份任务转发,并将changelog回放并应用到rocksdb,再收到备份任务的确认消息后向前序任务发送确认消息。若备份任务为尾任务,在应用到rocksdb后直接向前序任务发送确认消息。
(2)上游备份机制
为了避免故障恢复的时候全局回滚,我们采用上游备份机制,当故障发生时,只将故障任务切换到备份任务,并重新消费上游备份的输出。在正常运行过程中,任务向下游发送自己的输出后,并不清理本地的这些输出数据,而是缓存下来,并在收到快照消息的时候,记录当前的输出的偏移,当下游任务完成状态同步后,会向上游发送清理输出的消息,此时上游任务清理掉偏移之前缓存的输出数据以减少内存占用。
(3)冗余消息去重
考虑到故障恢复后,备份任务重新消费数据并向下游发送输出,而故障发生之前故障任务可能已经发送过部分相同的数据,此时下游任务则可能会处理相同的数据,而不满足exactly-once的投递语义,我们给每个消息都编上全局唯一的ID,并在每个任务中用rocksdb维护一个已处理消息ID的集合,当检测到消息ID在这个集合中的时候,则直接丢弃不进行处理,为了加快检测速度,采用布隆过滤器进行过滤,当布隆过滤器命无法判断的时候再访问rocksdb进行确定。为了减少资源占用,系统会定期清理布隆过滤器。
虽然本技术仍然采用检查点的基本机制,但是由于本方法较为轻量,增加的系统资源和额外容错开销较低,可以降低检查点周期到一百毫秒级,以防止故障发生时数据过多的回滚。
故障恢复阶段
当单点故障发生时,直接将故障任务切换到备份任务,此时备份任务启动计算逻辑准备计算,同时上游任务将备份输出恢复到上一次检查点的偏移,并向下游发送备份的输出数据,备份任务重新消费上上游输出并向下游输出。由于仅仅进行任务的切换,流式处理可以被快速恢复。
然而,由于备份任务采用rocksdb作为状态存储,同时受限于所在机器的内存、CPU等资源,可能计算比较慢,甚至引起系统的反压机制,降低系统整体性能。我们会同时原地地重启主任务并接管原有状态后端rocksdb的状态,若无法原地重启,则在其他机器上重启,此时该状态为空。然后将其挂到备份任务的链尾,然后主任务通过其前序任务,进行状态追赶。当完成状态同步后,在备份任务接收到检查点消息时,并完成状态同步后,将重启的主任务重新恢复成链头,并将计算切换到主任务。此时完成整个故障恢复。
Claims (7)
1.一种流式处理系统的轻量级容错方法,其特征在于:分为两个阶段:无故障运行阶段和故障恢复阶段;
所述无故障运行阶段,将流式处理系统中的有状态任务组织成多条链式结构,以K个任务连成一条链,其中K为用户指定的容错参数,链上的每一个任务都周期性地采用链式地将状态增量的同步方法,结合上游备份机制和冗余消息去重机制,向其备份任务同步任务状态;所述故障恢复阶段,在故障发生时,将故障任务切换到其链上的备份任务,备份任务启动计算逻辑准备计算,同时上游任务将备份输出恢复到上一次检查点的偏移,并向下游发送备份的输出数据,备份任务重新消费上游输出并向下游输出,恢复流式计算,同时原地重启主任务并接管原有状态后端rocksdb的状态,若无法原地重启,则在其他机器上重启,此时该状态为空,然后将其挂到备份任务的链尾,然后主任务通过其前序任务,进行状态追赶,当完成状态同步后,在备份任务接收到检查点消息时,并完成状态同步后,将重启的主任务重新恢复成链头,并将计算切换到主任务;所述状态增量的同步方法为:在更新自己的状态,将状态更新追加到changelog中,当收到检查点消息时,则对changelog进行冗余更新去除,即对于同一个状态的多次更新,只保留最后一次更新,然后对changelog进行无损压缩;之后将压缩后的changelog发送到链上的备份任务并等待确认,当收到备份任务的确认后即完成状态同步;备份任务收到changelog后,向其备份任务转发,并将changelog回放并应用到rocksdb,再收到备份任务的确认消息后向前序任务发送确认消息;若备份任务为尾任务,在应用到rocksdb后直接向前序任务发送确认消息。
2.如权利要求1所述的一种流式处理系统的轻量级容错方法,其特征在于:所述上游备份机制为:当故障发生时,只将故障任务切换到备份任务,并重新消费上游备份的输出,在正常运行过程中,任务向下游发送自己的输出后,并不清理本地的这些输出数据,而是缓存下来,并在收到快照消息的时候,记录当前的输出的偏移,当下游任务完成状态同步后,会向上游发送清理输出的消息,此时上游任务清理掉偏移之前缓存的输出数据以减少内存占用。
3.如权利要求2所述的一种流式处理系统的轻量级容错方法,其特征在于:所述冗余消息去重机制为:给每个消息都编上全局唯一的ID,并在每个任务中用rocksdb维护一个已处理消息ID的集合,当检测到消息ID在这个集合中的时候,则直接丢弃不进行处理,为了加快检测速度,采用布隆过滤器进行过滤,当布隆过滤器命无法判断的时候再访问rocksdb进行确定,为了减少资源占用,定期清理布隆过滤器。
4.如权利要求3所述的一种流式处理系统的轻量级容错方法,其特征在于:所述后端是内存或者rocksdb。
5.如权利要求4所述的一种流式处理系统的轻量级容错方法,其特征在于:所述状态更新为增加,删除,改变。
6.如权利要求5所述的一种流式处理系统的轻量级容错方法,其特征在于:所述无损压缩采用LZ、LZW或Snappy算法。
7.如权利要求6所述的一种流式处理系统的轻量级容错方法,其特征在于:取K=3。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110589994.5A CN113312210B (zh) | 2021-05-28 | 2021-05-28 | 一种流式处理系统的轻量级容错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110589994.5A CN113312210B (zh) | 2021-05-28 | 2021-05-28 | 一种流式处理系统的轻量级容错方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113312210A CN113312210A (zh) | 2021-08-27 |
CN113312210B true CN113312210B (zh) | 2022-07-29 |
Family
ID=77376016
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110589994.5A Active CN113312210B (zh) | 2021-05-28 | 2021-05-28 | 一种流式处理系统的轻量级容错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113312210B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017097006A1 (zh) * | 2015-12-11 | 2017-06-15 | 华为技术有限公司 | 一种实时数据容错处理方法及系统 |
CN110190991A (zh) * | 2019-05-21 | 2019-08-30 | 华中科技大学 | 一种多应用场景下的分布式流处理系统的容错方法 |
CN111752752A (zh) * | 2020-05-28 | 2020-10-09 | 苏州浪潮智能科技有限公司 | 一种基于Spark流计算框架的消息容错方法及系统 |
-
2021
- 2021-05-28 CN CN202110589994.5A patent/CN113312210B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017097006A1 (zh) * | 2015-12-11 | 2017-06-15 | 华为技术有限公司 | 一种实时数据容错处理方法及系统 |
CN106874142A (zh) * | 2015-12-11 | 2017-06-20 | 华为技术有限公司 | 一种实时数据容错处理方法及系统 |
CN110190991A (zh) * | 2019-05-21 | 2019-08-30 | 华中科技大学 | 一种多应用场景下的分布式流处理系统的容错方法 |
CN111752752A (zh) * | 2020-05-28 | 2020-10-09 | 苏州浪潮智能科技有限公司 | 一种基于Spark流计算框架的消息容错方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113312210A (zh) | 2021-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3754514B1 (en) | Distributed database cluster system, data synchronization method and storage medium | |
US8904231B2 (en) | Synchronous local and cross-site failover in clustered storage systems | |
US7882286B1 (en) | Synchronizing volumes for replication | |
US7719443B1 (en) | Compressing data in a continuous data protection environment | |
US8271447B1 (en) | Mirroring metadata in a continuous data protection environment | |
US7428657B2 (en) | Method for rolling back from snapshot with log | |
US8108634B1 (en) | Replicating a thin logical unit | |
US8060714B1 (en) | Initializing volumes in a replication system | |
US10216589B2 (en) | Smart data replication recoverer | |
US6691245B1 (en) | Data storage with host-initiated synchronization and fail-over of remote mirror | |
US8862541B1 (en) | N-site asynchronous replication | |
US7809892B1 (en) | Asynchronous data replication | |
KR20190049266A (ko) | 네트워크에서 메타데이터의 동기화를 제어하는 장치 및 그 방법 | |
US20070055836A1 (en) | Information processing system, separation concealment apparatus, separation control method, and program | |
US8689043B1 (en) | Fast failover with multiple secondary nodes | |
CN110377487A (zh) | 一种处理高可用集群脑裂的方法及装置 | |
CN113312210B (zh) | 一种流式处理系统的轻量级容错方法 | |
CN111984474B (zh) | 一种双控集群故障恢复的方法、系统及设备 | |
CN111400065A (zh) | 一种分离全局zookeeper的pulsar消息异地多活方法及系统 | |
Yang et al. | Multi-Active Multi-Datacenter Distributed Database Architecture Design based-on Secondary Development Zookeeper | |
Gog et al. | Falkirk wheel: Rollback recovery for dataflow systems | |
CN113312211B (zh) | 一种确保分布式学习系统的高可用性方法 | |
JP2000057030A (ja) | 2重更新を行うデータベースを有するクライアントサーバーシステム | |
CN112667440A (zh) | 一种高可用MySQL的异地灾备方法 | |
US20210073091A1 (en) | Method of fault management in a network of nodes and associated part of network of nodes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |