前言
前提:Docker已安装!
如果没有安装,安装教程可以参考:
链接: Docker内分布式消息系统kafka的安装和使用第一部分:Centos7安装Docker
启动Docker服务
启动docker服务:
systemctl start docker
#或者
service docker start
检查docker进程的运行状态:
systemctl status docker
#或者
service docker status
一、安装Flume
docker中查看镜像
docker search flume
拉取pull 新版稳定 flume2.0.0
docker pull probablyfine/flume
可能存在的问题
镜像拉取时,可能超时,这就需要我们更改镜像源。
方法一(不太好用)
#一条一条的输入命令,其中{}为一条命令,总共六条。
#如果/etc/docker 已经存在,则不需要进行创建,直接跳过第一条命令。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
方法二(很好用!)
#一条一条的输入命令,其中{}为一条命令,总共六条。
#如果/etc/docker 已经存在,则不需要进行创建,直接跳过第一条命令。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
查看已经拉取的镜像
docker images
二、使用Flume
1.启动容器
docker run --name flume-test --restart always --net=host -e FLUME_AGENT_NAME="agent" -d probablyfine/flume
查看已经启动的容器
docker ps
2.进入容器
docker exec -it flume-test /bin/bash
3.案例
一共有两个案例
案例1 Avro source
Avro可以发送一个给定的文件给Flume,Avro 源使用AVRO RPC机制。
1) 创建agent配置文件
cd /opt/flume
touch ./conf/avro.conf#在conf目录下编辑一个avro.conf空文件
cd ./conf
然后,我们在avro.conf写入以下内容
cat <<EOF >> avro.conf
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141
#注意这个端口名,在后面的教程中会用得到
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
EOF
上面Avro Source参数说明如下:
Avro Source的别名是avro,也可以使用完整类别名称org.apache.flume.source.AvroSource,因此,上面有一行设置是a1.sources.r1.type = avro,表示数据源的类型是avro。
bind绑定的ip地址或主机名,使用0.0.0.0表示绑定机器所有的接口。a1.sources.r1.bind = 0.0.0.0,就表示绑定机器所有的接口。
port表示绑定的端口。a1.sources.r1.port = 4141,表示绑定的端口是4141。
a1.sinks.k1.type = logger,表示sinks的类型是logger。
2) 启动flume agent a1
/opt/flume/bin/flume-ng agent -c . -f /opt/flume/conf/avro.conf -n a1 -Dflume.root.logger=INFO,console #启动日志控制台
这里我们把这个窗口称为agent窗口。
3) 创建指定文件
先打开另外一个终端,重新进入该容器(进入容器命令:docker exec -it flume-test /bin/bash)后,在/opt/flume下写入一个文件log.00,内容为hello,world:
cd /opt/flume
touch log.00
echo "hello world" > ./log.00
我们再打开另外一个终端,重新进入该容器(进入容器命令:docker exec -it flume-test /bin/bash)后执行:
bin/flume-ng avro-client --conf conf -H localhost -p 4141 -F /opt/flume/log.00
此时我们可以看到第一个终端(agent窗口)下的显示,也就是在日志控制台,就会把log.00文件的内容打印出来:
avro source执行成功!
案例2 netcatsource
1) 创建agent配置文件
cd /opt/flume
sudo vim ./conf/example.conf #在conf目录创建example.conf
cd ./conf
在example.conf里写入以下内容:
cat <<EOF >> example.conf
#example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#同上,记住该端口名
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
EOF
2)启动flume agent (即打开日志控制台):
cd /opt/flume
/opt/flume/bin/flume-ng agent --conf ./conf --conf-file ./conf/example.conf --name a1 -Dflume.root.logger=INFO,console
打开日志控制台
再打开一个终端,进入该容器(进入容器命令:docker exec -it flume-test /bin/bash)后,执行命令:
echo "Hello, world!" > /dev/tcp/localhost/44444
echo "Hello, Flume" > /dev/tcp/localhost/44444
然后就可以在终端下通过echo输入任何字符,第一个终端的日志控制台也会有相应的显示,如我们输入"Hello, world!", “Hello, Flume” 得出