分布式事务

ACID和BASE

ACID是指原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration)。

  • 原子性 事务中的所有操作要么都成功要么都失败
  • 一致性 外界访问数据库中的数据时,不会访问到事物的中间状态,只会访问到最终的状态
  • 隔离性 事务之间不会相互影响,避免脏读、幻读给业务带来数据不一致问题
  • 持久性 事务一旦执行成功,其最终状态会被持久化存储下来,不会失效。

BASE是指基本可用(Base Available)、柔性状态(Soft State)、最终一致性(Eventual Consistency)。

  • 基本可用 是指分布式系统出现故障时,允许损失部分可用性,保障系统基本可用。
  • 柔性状态 是指允许系统出现中间状态,而该中间系统并不会影响系统的整体可用性。
  • 最终一致性 系统在经过一段时间之后,系统中的所有副本最终会达到一致的状态。

ACID和BASE代表了两种截然相反的设计哲学。ACID是传统数据库常用的设计理念,追求强一致性模型;BASE支持的是高效的分布式数据库,通过牺牲强一致性来获得高可用性。不同的业务场景对数据的一致性要求不一样,因此这两种设计理念也可能会结合在一起使用。

阅读更多

Flink源码分析-集群部署

分析Flink程序的启动过程,有助于理解和把握Flink是如何启动程序,集群和单机运行的区别,当出错时如何恢复重启,如何分配资源。

Demo

先看一个简单的stream demo

阅读更多

Flink源码分析- 高可用

心跳

ResourceManager,TaskManager,JobManager会通过心跳来监测相互之间的状态

高可用服务

Leader选举和提取。只有配置了Zookeeper才是真正的高可用

阅读更多

Flink源码分析-State

Flink中的容错,一致性语义都是靠State来实现的。

State需要结合Checkpoint,Snapshot才能发挥作用。

State 可以按照维度进行划分:

类型:

  1. Keyed State
  2. Operator

数据组织格式:

  1. Managed (List Value Map)
  2. Raw (用户自定义的格式)
阅读更多

Flink源码分析-Graph

Flink以DAG的方式来执行程序,它会根据用户的代码生成三个Graph,但我认为实际上还有一个Graph,就是用户的程序直接映射出来的。

  1. Plan ProgramGraph
  2. StreamGraph
  3. JobGraph
  4. ExecutionGraph
阅读更多

Flink源码分析-Checkpoint

Keyword

  • Checkpoint
  • Snapshot
  • Barrier
  • State
  • Savepoint

CheckpointCoordinator定时checkpoint

CheckpointCoordinator会启动一个定时任务触发checkpoint

阅读更多