如何使用 Flink 每天实时处理百亿条日志?
Sherlock.IO 是 eBay 现有的监控平台,每天要处理上百亿条日志、事件和指标。Flink Streaming job 实时处理系统用于处理其中的日志和事件。
图片来自 Pexels
本文将结合监控系统 Flink 的现状,具体讲述 Flink 在监控系统上的实践和应用,希望给同业人员一些借鉴和启发。
监控系统 Flink 的现状
eBay 的监控平台 Sherlock.IO 每天处理着上百亿条日志(log),事件(event)和指标(metric)。
通过构建 Flink Streaming job 实时处理系统,监控团队能够及时将日志和事件的处理结果反馈给用户。
当前,监控团队维护着 8 个 Flink 集群,最大的集群规模达到上千个 TaskManager,总共运行着上百个作业(job),一些作业已经稳定运行了半年以上。
元数据驱动
为了让用户和管理员能够更加快捷地创建 Flink 作业并调整参数,监控团队在 Flink 上搭建了一套元数据微服务(metadata service)。
该服务能够用 Json 来描述一个作业的 DAG,且相同的 DAG 共用同一个作业,能够更加方便地创建作业,无需调用 Flink API。
图 1:Sherlock.IO 流处理整体架构
目前,用这套元数据微服务创建的作业仅支持以 Kafka 作为数据源,只要数据接入到 Kafka,用户就可以定义 Capability 来处理逻辑从而通过 Flink Streaming 处理数据。
元数据微服务
图 2:元数据微服务框架
描述作业的元数据包含三个部分:
Capability
Policy
Resource
Flink 适配器(Adaptor)连接了 Flink Streaming API 和元数据微服务 API,且会根据元数据微服务描述的作业调用 Flink Streaming API 来创建作业,从而屏蔽 Flink Stream API。
①Capability
事件处理 Capability 先从 Kafka 读出数据,再写到 Elasticsearch 中。
该 Capability 将该作业命名为“eventProcess”,并定义其并行度为“5”,其算子为“EventEsIndexSinkCapability”, 其数据流为“Source→Sink”。
另外,我们还实现了 Zookeeper 定时更新的机制,使得 Policy 修改后不再需要重启作业,只要是在更新时间间隔内,该命名空间的 Policy 修改就会被自动应用到作业上。
共享作业
Flink 作业的优化和监控
Heartbeat
可用性
①Flink 作业重启
②Flink 作业中止
④Flink 作业在运行中不再处理数据
Flink 作业隔离
图 7:Flink 作业隔离前后的调度图
反压
其他监控手段
①History server
②监控作业和集群
实例
Event Alerting
Eventzon
由于各个事件的数据源不同,它们的元数据也不同,因此无法用一条统一的规则来描述它。
我们专门定义了一套作业来处理 Eventzon 的事件,它包含了多个 Capability,比如 Filter Capability,用来过滤非法的或者不符合条件的事件;又比如 Deduplicate Capability,可以用来去除重复的事件。
Netmon
eBay 的每一台设备都要“登记造册”,每台设备将日志发过来后,我们通过 EnrichCapability 从“册子”中查询这台设备的信息,并把相关信息比如 IP 地址,所在的数据中心,所在的机架等填充到日志信息中作为事件保存。
当上述情况发生时,Netmon 会有相应的规则将发生在网络抖动时生成的告警标记为“已解决”(Resolved)。
总结与展望
然而在运维 Flink 的过程中,我们也发现了由于作业重启等原因导致误报少报告警的情况发生,从而误导客户。因此今后我们会在 Flink 的稳定性和高可用性上投入更多。
参考文献:
[1]https://ci.apache.org/projects/flink/flink-docs-release-1.7/concepts/runtime.html#task-slots-and-resources
[2]https://ci.apache.org/projects/flink/flink-docs-release-1.7/monitoring/metrics.html
[3]https://ci.apache.org/projects/flink/flink-docs-release-1.4/monitoring/historyserver.html
出处:https://yq.aliyun.com/articles/714592?utm_content=g_1000072645
END
关注我
公众号(zhisheng)里回复 面经、ES、Flink、 Spring、Java、Kafka、监控 等关键字可以查看更多关键字对应的文章
Flink 实战
1、《从0到1学习Flink》—— Apache Flink 介绍
2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
3、《从0到1学习Flink》—— Flink 配置文件详解
4、《从0到1学习Flink》—— Data Source 介绍
5、《从0到1学习Flink》—— 如何自定义 Data Source ?
6、《从0到1学习Flink》—— Data Sink 介绍
7、《从0到1学习Flink》—— 如何自定义 Data Sink ?
8、《从0到1学习Flink》—— Flink Data transformation(转换)
9、《从0到1学习Flink》—— 介绍 Flink 中的 Stream Windows
10、《从0到1学习Flink》—— Flink 中的几种 Time 详解
11、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 ElasticSearch
12、《从0到1学习Flink》—— Flink 项目如何运行?
13、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 Kafka
14、《从0到1学习Flink》—— Flink JobManager 高可用性配置
15、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍
16、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL
17、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ
18、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了
19、大数据“重磅炸弹”——实时计算框架 Flink
20、《Flink 源码解析》—— 源码编译运行
21、为什么说流处理即未来?
22、OPPO数据中台之基石:基于Flink SQL构建实数据仓库
23、流计算框架 Flink 与 Storm 的性能对比
24、Flink状态管理和容错机制介绍
25、原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
26、Apache Flink 是如何管理好内存的?
27、《从0到1学习Flink》——Flink 中这样管理配置,你知道?
28、《从0到1学习Flink》——Flink 不可以连续 Split(分流)?
29、Flink 从0到1学习—— 分享四本 Flink 的书和二十多篇 Paper 论文
30、360深度实践:Flink与Storm协议级对比
31、Apache Flink 1.9 重大特性提前解读
32、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了
33、美团点评基于 Flink 的实时数仓建设实践
34、Flink 灵魂两百问,这谁顶得住?
35、一文搞懂 Flink 的 Exactly Once 和 At Least Once
36、你公司到底需不需要引入实时计算引擎?
37、Flink 从0到1学习 —— 如何使用 Side Output 来分流?
38、一文让你彻底了解大数据实时计算引擎 Flink
39、基于 Flink 实现的商品实时推荐系统(附源码)