大数据运维实战第二十课 日均数据量 30 亿的 Filebeat+Kafka+Mirrormaker 跨机房实时日志传送案例

转载自博客:https://blog.csdn.net/fegus/article/details/126421162

案例环境介绍
这是我们之前的一个应用案例,先说一下业务场景,这是一款电商 App 产品,此 App 运行在某公有云上,每天都会产生大量日志,其中涉及访问日志、购买日志、订单日志等多个信息,这些信息比较敏感。因此需要日志产生后马上回传到我们自建的 IDC 数据中心,然后存储在内部的大数据平台上,最后进行各种维度的分析和报表展示。我们的日志数据量每天平均在 30 亿左右,数据是实时产生,要求能实时的传输到 IDC 数据中心,数据延时不能超过 10 秒钟。

由于涉及数据量比较大,又对实时性要求较高,并且还是跨广域网传输数据,所以传统的日志文件传输方法肯定行不通了。为了更快地传输和更小的延时,我们将 App 服务部署在了华北区域,因为我们的数据中心在北京。基于此,最初采用 Flume+Kafka 的方案,用 Flume 作为日志收集工具,在每个 App 服务器上安装 Flume Agent 来收集日志数据,然后,实时地将日志数据传输到 IDC 数据中心的 Kafka 集群中。

但此方案使用不久,就发生了问题,第一个问题是服务器上安装的 Flume Agent 太消耗系统内存和 CPU 资源,影响了 App 服务器的正常运行;第二个问题是数据传输到 Kafka 集群时,由于网络抖动或者故障会出现丢失数据或者数据重复的问题,并且一旦出现数据丢失或者重复,无法进行补录数据,这是我们所不能容忍的。

后来,在经过多次的讨论和研究,改进了数据传输方案,这次采用了 Filebeat 加双 Kafka 集群的方式,也就是在 App 服务器上部署 Filebeat 软件,用来收集 App 日志数据;然后在公有云部署了一台 Kafka 集群,Filebeat 收集到的数据直接通过内网发送到公有云上的 Kafka 集群中;接着公有云上的 Kafka 集群再将数据实时同步到 IDC 数据中心的 Kafka 集群中,两个 Kafka 集群直接同步了我们采用的 Kafka MirrorMaker。这是 Kafka 官方提供的跨数据中心的流数据同步方案。

经过多次测试和试运行,此方案完美地满足了我们的应用需要,Filebeat 在前端 App 服务器上占有 CPU 资源最多在 10% 左右,内存维持在 2G 左右,这对 App 服务不会有任何影响。同时,由于采用了 2 个 Kafka 集群,Filebeat 和公有云上的 Kafka 是内网数据传输,所以不会出现网络问题。而两个 Kafka 之间的数据传输,虽然说也会由于网络延时或者抖动出现数据丢失或者重复的问题,但是,在发现某个时段数据有问题的时候,只需要在 IDC 数据中心的 Kafka 集群上重新拉取一下公有云 Kafka 集群上这个故障时间段的数据就行了。因而也不用担心网络出现问题。

目前此架构已经稳定运行了 2 年多,非常稳定。

Kafka MirrorMaker 如何工作
上面案例中提到了 MirrorMaker,Kakfa MirrorMaker 是 Kafka 官方提供的一个跨数据中心的流数据同步方案。它的实现原理是从一个源 Kafka 集群消费消息,然后在将消息生产到目标 Kafka 集群,其实就是一个普通的生产和消费。要使用 MirrorMaker,只需要简单地配置一下 MirrorMaker 的 Consumer 和 Producer,然后启动 MirrorMaker,就可以实现两个 Kafka 集群的准实时数据同步。

下图是一个 MirrorMaker 原理架构图:

 

从图中可以看出,MirrorMaker 位于源 Kafka 集群和目标 Kafka 集群之间,MirrorMaker 从源 Kafka 集群消费数据,此时 MirrorMaker 是一个 Consumer;接着,Kafka 将消费过来的数据直接通过网络传输到目标的 Kafka 集群中,此时 MirrorMaker 是一个 Producer。在实际的使用中,源 Kafka 集群和目标 Kafka 集群可以在不同的网络中,也可以跨广域网,此时的 MirrorMaker 就是一个 Kafka 集群的镜像,实现了数据的实时同步和异地备份。

在实际的使用中,MirrorMaker 可以和目标 Kafka 集群运行在一起,也可以将 MirrorMaker 单独运行在一个独立的机器上。根据我们的使用经验,MirrorMaker 单独运行在一台机器上性能更加稳定。

实时日志传输架构
上面提到了 Filebeat 加双 Kafka 集群,然后通过 Kafka MirrorMaker 在两个 Kafka 集群之间同步数据的应用架构。我们的 App 服务器有 20 台,每台都安装 Filebeat,然后指定要收集的日志,而两个 Kafka 集群,都采用 6 个节点构建,MirrorMaker 分布式部署在 3 个节点上。整个实时日志传输架构如下图所示:

 

posted on 2024-08-01 20:16  luzhouxiaoshuai  阅读(7)  评论(0编辑  收藏  举报

导航