Flink之状态管理与容错机制

本文详细介绍了Flink的状态管理,包括无状态与有状态计算的区别、状态的类型和使用方式,如Managed State与Raw State、Keyed State与Operator State。此外,还深入讨论了容错机制,如Checkpoint的实现以及MemoryStateBackend、FsStateBackend、RocksDBStateBackend等状态存储方式的选择。最后,强调了根据业务场景选择合适状态管理和存储的重要性。
摘要由CSDN通过智能技术生成

1 状态管理的基本概念

1.1 什么是状态

1.1.1 无状态的例子:消费延迟计算

消息队列:

一个生产者持续写入,多个消费组分别读取,如何实时统计每个消费者落后多少条数据?

//输入
{
	"timestamp": 1555516800,
	"offset":
	{
		"producer": 16,
		"consumer0": 10,
		"consumer1": 7,
		"consumer2": 12
	}
}
//输出
{
	"timestamp": 1555516800,
	"lag":
	{
		"consumer0": 5,
		"consumer1": 8,
		"consumer2": 3
	}
}
  • 单条输入包含所需的所有信息
  • 相同输入可以得到相同输出

1.1.2 有状态计算的例子:访问量统计

Nginx访问日志,每个请求访问一个URL地址,如何实时统计每个地址总共被访问了多少次?

输入输出:

{
	"@timestamp": "18/Apr/2019:00:00:00",
	"remote_addr": "127.0.0.1",
	"request": "GET",
	"url": "/api/a"
}
{
	"url": "/api/a",
	"count": 1	
}

{
	"@timestamp": "18/Apr/2019:00:00:00",
	"remote_addr": "127.0.0.1",
	"request": "POST",
	"url": "/api/b"
}
{
	"url": "/api/b",
	"count": 1	
}

{
	"@timestamp": "18/Apr/2019:00:00:00",
	"remote_addr": "127.0.0.1",
	"request": "GET",
	"url": "/api/a"
}
{
	"url": "/api/a",
	"count": 2
}
  • 单挑输入仅包含所需的部分信息:当前请求信息
  • 相同输入可能得到不同输出:当前请求之前的累计访问量

1.1.3 需要使用状态的场景

  • 去重:记录所有的主键
  • 窗口计算:已进入的未触发的数据
  • 机器学习|深度学习:训练的模型及参数
  • 访问历史数据:需要与昨日进行对比

1.2 状态管理

最直接的方式:内存

  • 存储容量限制
  • 备份与恢复
  • 横向扩展

对流式作业的要求

  • 7*24小时运行,高可靠
  • 数据不丢不重,恰好计算一次
  • 数据实时产出,不延迟
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值