蒙帕数据同步实践:Flink CDC实现Zabbix到Prometheus的数据同步

171 阅读7分钟

1、背景

蒙帕当前的技术架构中使用了 Zabbix Agent 来采集指标数据,鉴于 Prometheus 近年来的迅猛发展,以及在监控领域的广泛应用, 计划将Zabbix采集到的数据同步到Promtheus的时序数据库,以支持后续的业务需求。

2、数据规模

蒙帕有7000台( Zabbix Agent),每台设备上有 100 个指标,采集频率为每分钟一次 。

当前使用 Zabbix 进行指标数据采集,系统的数据量如下:

~zabbix.hosts 表:包含 7000 个主机信息。

o 核心字段:hostid, name

· zabbix.items 表:每个 VDI 监控 100 个指标,总共约 70 万个监控项。

o 核心字段:hostid, itemid, name

· zabbix.history 表:存储所有非整数类型的历史数据,每分钟约产生 70 万条记录。

o 核心字段:itemid, clock, value, ns

· zabbix.history_uint 表:存储所有整数类型的历史数据,每分钟同样约产生 70 万条记录。

o 核心字段:itemid, clock, value, ns

3、指标数据关联图

4、方案选型

4.1定时同步方案

蒙帕调研了多种将 Zabbix 数据同步到 Prometheus 的方案,包括 sql-exporter、query-exporter、zabbix_exporter 等。然而,这些方案在实际应用中可能会遇到以下问题:

1. MySQL 负载压力: 定期对 zabbix.hosts(7k 条记录)、zabbix.items(70w 条记录)以及 zabbix.history 和 zabbix.history_uint(每分钟各70w 条记录)三张表进行关联查询,给 MySQL 造成了巨大的负担,可能严重影响数据库的性能。

2. 数据同步延迟: 由于同步过程需要经过复杂的查询和数据处理,导致数据同步延迟,进而可能影响业务的实时性和用户体验。

3. 单点故障风险: 定时同步程序通常运行在单机环境中,存在单点故障的风险。一旦程序出现故障,不仅数据同步会中断,还需要处理复杂的补数逻辑,增加了维护的难度。

4. 指标同步的动态性不足: 指标的同步无法自动化,需手动维护同步的 SQL 语句,增加了管理和运维的负担。

5. 断点续传问题: 在同步过程中,如何保证数据的一致性和完整性是一个挑战,需要额外解决断点续传的问题。

综上所述,这种定时同步方案有较多潜在问题和挑战,不宜采用。

4.2Flink CDC实时分布式同步方案

针对定时同步方案的局限性,蒙帕引入了 Flink CDC 进行 Zabbix 数据的实时分布式同步。Flink CDC 通过读取 MySQL 的 binlog 日志,实现了对数据变化的实时捕获和同步,从而克服了之前方案中的诸多问题:

1. 实时性与低延迟: Flink CDC 通过实时捕获 MySQL 的数据变更,极大地减少了数据同步的延迟问题,确保业务能够实时获取最新的监控数据。

2. 降低数据库负载: 相比于定时查询,Flink CDC 直接从 binlog 中获取数据变更,避免了频繁的全量或增量查询,显著减轻了 MySQL 的查询压力,保护了数据库的性能。

3. 分布式与高可用: Flink 的分布式架构允许我们将同步任务分布在多个节点上运行,消除了单点故障的风险。即使某个节点发生故障,其他节点也能继续处理数据,确保同步过程的稳定性和连续性。

4. 动态数据处理: Flink CDC 支持动态地处理数据库中的数据变更,不需要手动维护复杂的同步 SQL 语句,这大大减少了运维和管理的工作量。

5. 断点续传: Flink CDC 内置了断点续传机制,能够在故障恢复后从上次同步的位置继续处理,保证了数据的一致性和完整性,解决了断点续传的难题。

通过 Flink CDC,蒙帕能够实现对 Zabbix 数据的高效、实时、分布式同步,为后续的业务需求提供了更可靠的基础架构支持。

4.2.1 系统架构图

实时分布式同步程序采用 Flink on Yarn 架构,支持对多个数据库的数据进行同步。通过实时处理,实现维度表的拉宽和事实表与维度表的关联。最终,将处理后的结果同时写入 Prometheus 和 Kafka。

4.2.2 实时同步数据流图

蒙帕在使用 Flink CDC 实现 Zabbix 数据实时同步的过程中,成功解决了以下技术难点:

1. 多库多表的数据同步:

Flink CDC 支持对多个数据库和多张表的数据进行同步,确保不同来源的数据能够高效、稳定地集成到统一的数据流中。

2. 多张表的实时关联:

实现了多张表的实时关联处理,确保在数据同步过程中,各表的数据能够精确匹配与合并,实现一致性和完整性的实时数据更新。

3. 数据迟到问题解决:

针对数据可能出现的迟到问题,引入了定时延迟合并机制,通过设置适当的延迟时间窗口,确保所有相关数据都能在合并前到达,保证数据关联的准确性。

4. 指标过滤与格式转换:

在数据同步过程中,支持对数据进行指标过滤,并转换为符合 Prometheus 格式的结构。这一步骤确保了同步到 Prometheus 的数据能够直接用于监控和分析,符合业务需求。

5、实施效果

自蒙帕采用 Flink CDC 实现 Zabbix 数据的实时同步以来,在以下几个方面取得了显著成效:

1. 实时性提升:

通过 Flink CDC 实现数据的实时捕获和同步,极大地减少了数据延迟,确保业务系统能够实时获取最新的监控数据。相比于之前的定时同步方案,数据传输的时效性显著提升,用户体验得到了明显改善。

2. 数据库性能提升:

采用 Flink CDC 从 MySQL binlog 中捕获数据变更,避免了频繁的全量查询和复杂的关联操作,大幅减轻了 MySQL 的查询负载。数据库的整体性能得到显著提升,查询响应时间缩短,系统运行更加流畅。

3. 系统稳定性增强:

Flink CDC 基于分布式架构,消除了单点故障的风险。即使在高负载或部分节点故障的情况下,系统依然能够稳定运行,保证了数据同步的连续性和一致性,提升了系统的可靠性和可用性。

4. 成本效益提升:

由于 Flink CDC 减少了对数据库的直接查询压力,我们能够在硬件资源的配置上更加节约,降低了数据库扩展的需求。同时,Flink 的高效处理能力提高了资源利用率,减少了运维成本,为公司带来了显著的成本效益。

综上所述,Flink CDC 在实时数据同步、系统性能提升和成本控制等方面带来了全面的优化,有效满足了业务增长中的各项需求。

6、结语

随着技术的不断进步,运维行业正面临着前所未有的挑战与机遇。蒙帕通过采用 Flink CDC 实现 Zabbix 数据的实时同步,不仅提升了自身的技术实力,还为行业树立了一个数据同步的最佳实践。此举有效解决了实时性、系统性能和成本效益等关键问题,证明了技术创新在运维中的重要性和价值。

蒙帕坚信,通过持续的技术优化和创新,能够为业务带来更多的增值服务,推动整个行业向更高效、更智能的方向发展。

在未来,蒙帕将继续紧跟技术前沿,不断研究和引入新兴技术,以确保解决方案始终处于行业领先地位,为客户和行业创造更大的价值。

关于蒙帕

上海蒙帕智能科技股份有限公司聚焦IT运维领域20余年,服务客户超过400多家。

2015年组建研发团队,专注于“智能巡检机器人” 及“智能运维综合管控平台” 的研发,目前已获得“智能运维类”软件著作权40余项,产品发明专利30余项。

在北京、西安、重庆、深圳、广州、沈阳、大连、郑州、武汉、成都、无锡等地均设有分公司及办事处。