基于 Docker 部署 Flume 应用

前言

本文目的在于通过 flume、zookeeper、kafka、docker 搭建基本的日志采集系统,实现日志的采集并将数据发送至 Kafka。

搭建前,需确保已安装以下组件:

  • JDK 8
  • Flume
  • Zookeeper
  • Kafka
  • Docker

同时需确保已掌握以下技能:

  • 能在本地部署并成功启动 Flume,且了解 Flume 的核心概念 sourcechannelsink
  • 能基本使用 Zookeeper,了解节点的创建、更新、查看与删除
  • 能基本使用 Kafka,了解 topic 的概念,实现消息的创建与消费
  • 了解 Docker,能基于 Dockerfile 创建镜像并启动容器

在本系统中,各组件职责分配如下:

组件名 组件职责
Flume 负责日志采集
Zookeeper 负责配置管理
Kafka 负责数据接收

Flume 配置

日志采集系统搭建的第一步,是完成 Flume 的配置。

在进行 Flume 配置前,我们首先假设面临如下需求:

  • 数据来源为 Thrift
  • 要求不同的日志源发送往相应的 kafka 队列

在此基础上,我们设计 Flume 配置文件 flume-docker.conf 如下:

# 配置一个 agent,agent 的名称可以自定义(如:docker)
# 指定 agent 的 sources(如:s1)、sinks(如:k1)、channels(如:c1)
docker.sources = s1
docker.sinks = k1 k2
docker.channels = c1 c2

# 配置 source
docker.sources.s1.channels = c1 c2
docker.sources.s1.type = thrift
docker.sources.s1.bind = 0.0.0.0
docker.sources.s1.port = 9999

docker.sources.s1.selector.type = multiplexing
docker.sources.s1.selector.header = type
docker.sources.s1.selector.mapping.panda_1 = c1
docker.sources.s1.selector.mapping.panda_2 = c2

# 配置 channels
docker.channels.c1.type = file
docker.channels.c1.dataDirs = /tmp/data/flume/c1/data
docker.channels.c1.checkpointDir = /tmp/data/flume/c1/checkpoint

docker.channels.c2.type = file
docker.channels.c2.dataDirs = /tmp/data/flume/c2/data
docker.channels.c2.checkpointDir = /tmp/data/flume/c2/checkpoint

# 配置 sinks
docker.sinks.k1.channel = c1
docker.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
docker.sinks.k1.kafka.bootstrap.servers = 192.168.117.128:9092
docker.sinks.k1.kafka.topic = panda_1
docker.sinks.k1.kafka.producer.acks = -1

docker.sinks.k2.channel = c2
docker.sinks.k2.type = org.apache.flume.sink.kafka.KafkaSink
docker.sinks.k2.kafka.bootstrap.servers = 192.168.117.128:9092
docker.sinks.k2.kafka.topic = panda_2
docker.sinks.k2.kafka.producer.acks = -1

该配置文件主要是通过以下 3 点满足上述假设的需求:

  • 使用 Flume Selector,通过 multiplexing 实现将多数据源发送至多管道
  • 通过 Selector 中的 headermapping 决定不同的数据源分别发送至哪个 channel
  • 配置多个 sink,分别对应各个 channel,并将其发送至指定的 kafka 队列

关于 multiplexing 的更多内容,可以参考官方文档

Zookeeper 管理

日志采集系统搭建的第二步,是将上述配置文件 flume-docker.conf 交由 Zookeeper 管理。

为此,我们首先要启动 Zookeeper 服务。在本例中,我们使用单节点模式,启动命令如下:

cd ${zk_home}/bin
./zkServer.sh start

然后,我们需要将上述配置文件 flume-docker.conf 的内容添加至 Zookeeper 的节点。

在本例中,此部分通过 Java API 实现,具体步骤如下:

STEP 01:引入 Zookeeper 客户端框架 Curator

<dependency>
    <groupId>org.apache.curator</groupId>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值