当前位置:   article > 正文

Flink之状态管理与容错机制_flink内部运行机制

flink内部运行机制

1 状态管理的基本概念

1.1 什么是状态

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

消息队列

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

  1. //输入
  2. {
  3. "timestamp": 1555516800,
  4. "offset":
  5. {
  6. "producer": 16,
  7. "consumer0": 10,
  8. "consumer1": 7,
  9. "consumer2": 12
  10. }
  11. }
  12. //输出
  13. {
  14. "timestamp": 1555516800,
  15. "lag":
  16. {
  17. "consumer0": 5,
  18. "consumer1": 8,
  19. "consumer2": 3
  20. }
  21. }
  • 单条输入包含所需的所有信息
  • 相同输入可以得到相同输出

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

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

输入输出:

  1. {
  2. "@timestamp": "18/Apr/2019:00:00:00",
  3. "remote_addr": "127.0.0.1",
  4. "request": "GET",
  5. "url": "/api/a"
  6. }
  7. {
  8. "url": "/api/a",
  9. "count": 1
  10. }
  11. {
  12. "@timestamp": "18/Apr/2019:00:00:00",
  13. "remote_addr": "127.0.0.1",
  14. "request": "POST",
  15. "url": "/api/b"
  16. }
  17. {
  18. "url": "/api/b",
  19. "count": 1
  20. }
  21. {
  22. "@timestamp": "18/Apr/2019:00:00:00",
  23. "remote_addr": "127.0.0.1",
  24. "request": "GET",
  25. "url": "/api/a"
  26. }
  27. {
  28. "url": "/api/a",
  29. "count": 2
  30. }
  • 单挑输入仅包含所需的部分信息:当前请求信息
  • 相同输入可能得到不同输出:当前请求之前的累计访问量

1.1.3 需要使用状态的场景

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

1.2 状态管理

最直接的方式:内存

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

对流式作业的要求

  • 7*24小时运行,高可靠
  • 数据不丢不重,恰好计算一次
  • 数据实时产出,不延迟
<
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/841967
推荐阅读
相关标签
  

闽ICP备14008679号