docker-compose部署flume

news/2024/5/2 7:49:34/文章来源:https://blog.csdn.net/angryshan/article/details/130523111

一、docker-compose部署

1. 依赖的服务/组件

  • java8
  • flume 1.9.0

2. 下载离线安装包

jdk8https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
flume 1.9.0https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
supervisor-4.2.1https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz
setuptools-44.0.0https://mirrors.aliyun.com/pypi/packages/b0/f3/44da7482ac6da3f36f68e253cb04de37365b3dba9036a3c70773b778b485/setuptools-44.0.0.zip#sha256=e5baf7723e5bb8382fc146e33032b241efc63314211a3a120aaa55d62d2bb008
meld3-2.0.1https://mirrors.aliyun.com/pypi/packages/53/af/5b8b67d04a36980de03505446d35db39c7b2a01b9bac1cb673434769ddb8/meld3-2.0.1.tar.gz#sha256=3ea266994f1aa83507679a67b493b852c232a7905e29440a6b868558cad5e775

3. Dockerfile

3.1 目录

dnmp/services/flume
.
│  apache-flume-1.9.0-bin.tar.gz
│  Dockerfile
│  jdk-8u202-linux-x64.tar.gz
|  meld3-2.0.1.tar.gz
|  setuptools-44.0.0.tar.gz
|  supervisor-4.2.1.tar.gz
|  supervisord.conf
└─confexec_flume.shflume-conf.properties.templateflume-env.ps1.templateflume-env.shflume-env.sh.templatelog4j.propertiessend-test-flume.conftest-flume.conf

3.2 supervisord.conf(若有安装,这里可以不装)

supervisord.conf 是supervisord的配置文件,只是将最后的 [include] 配置项取消注释,指定到配置存放目录

[include]
files = /etc/supervisor/config.d/*.conf

3.3 Dockerfile

FROM centos:centos7
LABEL MAINTAINER=mit description="FLume-ng数据采集agent" FlumeVersion=1.9.0# 安装 java 环境
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV CLASSPATH $JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $JAVA_HOME/bin:$PATH# 安装 flume
ADD apache-flume-1.9.0-bin.tar.gz /usr/local/
RUN mv /usr/local/apache-flume-1.9.0-bin /usr/local/flume
ENV FLUME_HOME /usr/local/flume
ENV PATH $FLUME_HOME/bin:$PATH# 修改默认的flume-ng jvm heap大小
RUN sed -i '225 s/Xmx20m/Xmx2048m/' /usr/local/flume/bin/flume-ng########### setuptools、meld3、supervisor可以试着不用 可能用于kafka#
# 安装 supervisor
# - setuptools
ADD setuptools-44.0.0.tar.gz /opt
WORKDIR /opt/setuptools-44.0.0/
RUN python setup.py install# - meld3
ADD meld3-2.0.1.tar.gz /opt
WORKDIR /opt/meld3-2.0.1/
RUN python setup.py install# - supervisor
ADD supervisor-4.2.1.tar.gz /opt
WORKDIR /opt/supervisor-4.2.1/
RUN python setup.py install
RUN mkdir -p /etc/supervisor && mkdir -p /etc/supervisor/config.d && rm -rf /opt/setuptools-44.0.0 /opt/meld3-2.0.1 /opt/supervisor-4.2.1
COPY supervisord.conf /etc/supervisor/
#ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
########### setuptools、meld3、supervisor可以试着不用 ## 设定工作目录
WORKDIR /usr/local/flume

3.4 docker-compose.yml

flume:build:context: ./services/flumeargs:TZ: "$TZ"image: flumeexpose:- 15510ports:- "15510:15510"container_name: flumeenvironment:JAVA_HOME: "/usr/local/java/jdk1.8.0_202"restart: alwaysnetwork_mode: bridgeprivileged: truevolumes:- ./services/flume/conf:/usr/local/flume/conf  #映射配置文件目录- ./logs/flume:/usr/local/flume/logs  #映射日志文件目录tty: true  #不加这个属性,容器启动后会自动停止

3.5 template文件

template文件到 apache-flume-1.9.0-bin.tar.gz 的解压包conf复制出来,因为映射会影响原容器内的内容

3.6 exec_flume.sh

自己封装的运行脚本,代码可以自己研究一下

#! /bin/bash
#./exec_flume.sh start jyDataApi-flume.conf jyDataAgent
#./exec_flume.sh stop jyDataApi-flume.conf jyDataAgent
#./exec_flume.sh restart flume_cmbc.conf(配置文件,自己修改) Cobub(代理名称,自己修改)
# FLUME环境变量
flumePath=/usr/local/flume
flumeLogPath=/usr/local/flume/logs
cd $flumePath
# 配置文件目录
process=$2
if [ ! -n "$process" ] ; thenecho "param process is empry"exit 1
fi
# 代理名称
AgentName=$3
if [ ! -n "$AgentName" ] ; thenecho "param AgentName is empry"exit 1
fi
JAR="flume"
function start(){if [ ! -f "$flumePath/conf/$process" ] ; thenecho "file $flumePath/conf/$process no exists"exit 1finum=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`echo "ps -ef|grep java|grep $JAR|grep $AgentName|wc -l"if [ "$num" = "0" ] ; thenif [ ! -d "/usr/local/flume/logs/game_log/" ];thenmkdir /usr/local/flume/logs/game_logfiif [ ! -d "/usr/local/flume/logs/flume_log/" ];thenmkdir /usr/local/flume/logs/flume_logfinohup bin/flume-ng agent -c conf -f conf/$process --name $AgentName -Dflume.root.logger=INFO,console >$flumeLogPath/flume.log 2>&1 &echo "启动成功...."echo "运行日志路径: $flumeLogPath/flume.log"elseecho "进程已经存在,启动失败,请检查....."exit 0fi
}function stop(){num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`if [ "$num" != "0" ] ; thenps -ef|grep java|grep $JAR|grep $AgentName|awk '{print $2;}'|xargs killecho "进程已经关闭..."elseecho "服务未启动,无需停止..."fi
}function restart(){if [ ! -f "$flumePath/conf/$process" ] ; thenecho "file $flumePath/conf/$process no exists"exit 1fiecho "begin stop process ..."stop# 判断程序是否彻底停止num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`while [ $num -gt 0 ]; dosleep 1num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`doneecho "process stoped,and starting ..."startecho "started ..."
}case "$1" in"start")start $@exit 0;;"stop")stopexit 0;;"restart")restart $@exit 0;;*)echo "Usage: exec_flume {start|stop|restart}"exit 1;;
esac

3.7 flume-env.sh

flume-env.sh.template 复制 重命名为 flume-env.sh

修改路径 要与dockerfile安装的路径相同(也可以在docker-compose写,就不用改flume-env.sh了)

environment:JAVA_HOME: "/usr/local/java/jdk1.8.0_202"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TX2JJCeH-1683343012563)(../image/image-20230506101300331.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oNLQvMxQ-1683343012564)(../image/image-20230506101230855.png)]

3.8 接收flume:test-flume.conf

# api log
jyDataAgent.sources=r1 r2
jyDataAgent.channels=c1
jyDataAgent.sinks=k1# 配置r1:TAILDIR 来自api接口
jyDataAgent.sources.r1.type = TAILDIR
#文件同步记录
jyDataAgent.sources.r1.positionFile =  /usr/local/flume/logs/jyDataApi_position.json
jyDataAgent.sources.r1.filegroups = f1
#监听指定文件夹下目录文件
jyDataAgent.sources.r1.filegroups.f1 = /usr/local/flume/logs/game_log/.*log# 配置r2:avro 来自游戏服务器(监听由15510端口传过来的数据)
jyDataAgent.sources.r2.type=avro
jyDataAgent.sources.r2.bind=0.0.0.0
jyDataAgent.sources.r2.port=15510# 配置channel-memory
jyDataAgent.channels.c1.type = memory
jyDataAgent.channels.c1.capacity = 1000
jyDataAgent.channels.c1.transactionCapacity = 100
jyDataAgent.channels.c1.byteCapacityBufferPercentage = 20
jyDataAgent.channels.c1.byteCapacity = 10485760# sink 输出文件格式(接收到的数据输出的目录及格式)
jyDataAgent.sinks.k1.type = file_roll
jyDataAgent.sinks.k1.sink.directory =  /usr/local/flume/logs/flume_log
jyDataAgent.sinks.k1.sink.pathManager = rolltime
jyDataAgent.sinks.k1.sink.pathManager.extension = log
jyDataAgent.sinks.k1.sink.rollInterval = 120# 绑定chennel
jyDataAgent.sources.r1.channels=c1
jyDataAgent.sources.r2.channels=c1
jyDataAgent.sinks.k1.channel=c1

3.9 发送flume:send-test-flume.conf

#配置在日志生成的服务器
# 游戏服务器flume配置文件
# 记录最近读取日志位置inode文件:/data/flumeData/logs/jyDataApi_position.json 按实际情况修改
# channel使用flie方式,需对应新建checkpoint和data目录并修改配置
# sink配置jyDataNode1 jyDataNode2,需绑定hosts具体ip地址联系运维# 定义Agent
jyDataAgent.sources=r1
jyDataAgent.channels=c1
jyDataAgent.sinks=k1 k2# 配置r1:TAILDIR 游戏区服日志
jyDataAgent.sources.r1.type = TAILDIR
jyDataAgent.sources.r1.positionFile = /usr/local/flume/logs/jyDataApi_position.json
jyDataAgent.sources.r1.filegroups = f1
#监听该文件夹的日志文件(游戏端需将生成的日志写入该文件夹下,按实际需求修改)
jyDataAgent.sources.r1.filegroups.f1 = /usr/local/flume/logs/game_log/.*log# 配置channel
jyDataAgent.channels = c1
jyDataAgent.channels.c1.type = file
jyDataAgent.channels.c1.checkpointDir = /usr/local/flume/logs/checkpoint
jyDataAgent.channels.c1.dataDirs = /usr/local/flume/logs/data# 配置sink
## 定义sinkgroups
jyDataAgent.sinkgroups = g1
## k1
jyDataAgent.channels = c1
jyDataAgent.sinks.k1.type = avro
#发送数据到该域名或ip的指定端口
jyDataAgent.sinks.k1.hostname = 192.168.240.141
jyDataAgent.sinks.k1.port = 15510
## k2
jyDataAgent.channels = c1
jyDataAgent.sinks.k2.type = avro
jyDataAgent.sinks.k2.hostname = 192.168.240.141
jyDataAgent.sinks.k2.port = 15510
## 设置sink权限
jyDataAgent.sinkgroups.g1.sinks = k1 k2
jyDataAgent.sinkgroups.g1.processor.type = failover
jyDataAgent.sinkgroups.g1.processor.priority.k1 = 10
jyDataAgent.sinkgroups.g1.processor.priority.k2 = 1
jyDataAgent.sinkgroups.g1.processor.maxpenalty = 10000# 绑定chennel
jyDataAgent.sources.r1.channels=c1
jyDataAgent.sources.r2.channels=c1
jyDataAgent.sinks.k1.channel=c1
jyDataAgent.sinks.k2.channel=c1

4. 运行docker-compose up -d

4.1 进入容器

docker exec -it flume sh

4.2 运行exec_flume.sh脚本

# exec_flume.sh 存放目录/flume/conf中,可自行修改# 脚本启动
cd /conf/# 启动flume
接收端执行  /bin/bash exec_flume.sh start 接收端-test-flume.conf xm2Agent
生成端执行  /bin/bash exec_flume.sh start 生成端-test-flume.conf xm2Agent# 检查flume运行日志
cat /flume/logs/flume.log# 测试日志同步
echo “test” >> /flume/logs/game_log/test.log# 查看是否存在test.log同步记录
cat   /flume/logs/flume_position.json# 停止
/bin/bash exec_flume.sh stop 接收端-test-flume.conf xm2Agent
/bin/bash exec_flume.sh stop 生成端-test-flume.conf xm2Agent# 重启
/bin/bash exec_flume.sh restart 接收端-test-flume.conf xm2Agent
/bin/bash exec_flume.sh restart 生成端-test-flume.conf xm2Agent

5. kafka研究

上面构建的镜像只是将相应的服务打进了镜像里,使用时应挂载相应flume-ng配置和supervisor应用配置,以下为我使用docker-compose启动flume服务的相应docker-compose.yaml部分配置

  flume-01:image: flume:1.9.0container_name: flume-01hostname: flume-01restart: alwaysports:- "6000:6000"   # flume-ng source监听的端口volumes:- /etc/localtime:/etc/localtime:ro- /home/mit/my_project/big_data/data_collect/flume/supervisord.d/flume.conf:/etc/supervisord.d/flume.conf              # flume守护- /home/mit/my_project/big_data/data_collect/flume/conf/http_kafka_channel.conf:/usr/local/flume/conf/http_kafka_channel.conf          # flume-ng agent启动的配置文件- /home/mit/my_project/big_data/data_collect/flume/conf/log4j.properties:/usr/local/flume/conf/log4j.properties- /home/mit/my_project/big_data/data_collect/flume/data:/usr/local/flume/data                                          # FileChannel data dir- /home/mit/my_project/big_data/data_collect/flume/checkpoint:/usr/local/flume/checkpoint                              # FIleChannel checkpoint dir- /home/mit/my_project/big_data/data_collect/flume/logs:/usr/local/flume/logs                                          # flume-ng agent日志- /home/mit/my_project/big_data/data_collect/flume/lib/fastjson-1.2.59.jar:/usr/local/flume/lib/fastjson-1.2.59.jar    # flume-ng 自定义拦截器依赖的jar包需要全部列出- /home/mit/my_project/big_data/data_collect/flume/lib/TQDataInterceptor-0.1.jar:/usr/local/flume/lib/TQDataInterceptor-0.1.jarenvironment:JAVA_HOME: "/usr/java/jdk1.8.0_202-amd64/"depends_on:- kafka-01- kafka-02- kafka-03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_296544.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

石油化工企业防雷工程应用解决方案

随着现代石油化工行业的不断发展,防雷工程的重要性也越来越凸显。在石油化工行业中,防雷工程是一项至关重要的工作,因为石油化工行业常常面临雷电等自然灾害的威胁,这些灾害可能导致严重的安全事故和经济损失。石化企业其生产过程…

AMA 回顾|关于访问水晶铸造的一些调整建议

这是社区系列 AMA 的第一期。下周,我们将举行一场新的 AMA,讨论重新启动游戏的相关内容。 感谢大家在百忙之中参与这次活动。相信社区的每一位成员都在蓝精灵协会这个项目中投资了一些东西,比如时间、精力或者是金钱。蓝精灵协会团队在过去的…

【Linux】Shell编程之条件语句

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、条件测试操作作1.文件测试2.整数值比较3.逻辑测试 二、if语句的结构1.单分支结构2.双分支结构3.多分支结构 三、case多分支结构 一、条件测试操作作 test命令 …

java版工程项目管理系统平台,助力工程企业实现数字化管理系统源代码

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

php+vue网盘系统的设计与实现

该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…

webpack : 无法加载文件 D:\...\node-v18.16.0-win-x64\webpack.ps1,因为在此系统上禁止运行脚本

用idea打开项目时,安装webpack打包的包之后,由于组策略问题拒绝执行脚本 解决方法 1、cmd打开命令行。输入:powershell 出现 PS 证明已经进入组策略模式 2、输入:get-executionpolicy,查看策略 ​ 输入&#xff1a…

【JavaEE初阶】简单了解wait和notify方法~

目录 🌟1、wait() 🌟2、notify() 🌟1、wait() (1)wait()方法与notify()方法都是Object类中的方法。 (2)wait()是让线程等待一段时间,死等——>状态WAITING:没有时间限制的等待.…

使用 NutUI 搭建「自定义业务风格」的组件库 | 京东云技术团队

作者:京东零售 佟恩 本文介绍,如何使用 NutUI 组件库,搭建一套为专属业务风格的业务组件库。 NutUI 是一款京东风格的移动端组件库。NutUI 目前支持 Vue 和 React技术栈,支持Taro多端适配。 当下的实现方式 一般组件库&#xff…

【Python入门篇】——Python基础语法(标识符与运算符)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Unity 光照

\\\\\\\ Unity烘焙(Baking)是指将场景中的动态光照转换为静态贴图。在烘焙过程中,Unity会将场景中的光源、材质和对象等信息计算出来,并存储为贴图。当玩家进入场景时,Unity只需要读取这些预计算好的贴图或者数据文件&…

《创造》人生旅程

上个月读完的这本《创造》,发现作者是iPod的创造者,让我回想起我刚工作时买的iPod。iPod确是惊艳之作,那时我一个月挣1000元,竟毫不犹豫花了2000就买了,并一直伴随我直到进入智能手机时代。《创造》会写什么&#xff1…

VSCode作业1:猜数字游戏和简单计数器(包含完整代码)

目录 猜数字游戏 一、使用‘random’函数获取随机数 二、 分情况讨论输入值大小情况 三、HTML代码 四、CSS样式及运行效果 简单计数器(计时器) 一、使用‘setInterval’函数实现计数效果 二、使用’clearInterval‘函数实现暂停计数和重新计数效果 …

字符设备注册与注销

1、对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 static inline int register_chrdev(unsigned int major, const char *name,const…

Lucene和Solr和Elasticsearch区别,全文检索引擎工具包Lucene索引流程和搜索流程实操

文章目录 基本概念什么是全文检索技术全文检索的应用场景搜索引擎站内搜索(关注)文件系统的搜索 Lucene & solr & es介绍区别Solr与Lucene对比ES与Lucene的区别ES与Solr对比 Lucene实现全文检索的流程入门程序需求环境准备数据库脚本初始化Lucen…

arm 源码编译kernel 对比image zimage uimage vmlinux

一 源码编译kernel 下载交叉编译工具链 下载cc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz ,这是官网的。使用下面命令下载。 585 wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/gcc-linaro-4.9…

揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽、存储空间、计算能力。点对点传输技术有很多应用,包括共享各种格式音频、视频、数据等。 在5G重新定义带宽,信息技术不断发展的今天&…

对标世界一流|亚马逊供应链管理经验借鉴

当前电商零售行业竞争日趋激烈,服务标准的提升、产品价格的竞争力等因素,导致企业经营成本持续上升,供应链的管理水平已经成为零售行业成败的关键。然而在电商零售行业的红海竞争中,亚马逊却始终保持着高速增长的态势,…

【Python】贪吃蛇 —— 无聊必备的小项目

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年,气象学家洛伦兹提出的“蝴蝶效应”表示:“一只蝴蝶在巴西扇动翅膀,有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践,帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动,避免“龙…

如何裁剪图片大小尺寸?

如何裁剪图片大小尺寸?平时我们在工作或者学习的时候,会经常需要将图片上传到不同的网站或者平台上,然而上传的时候经常会受到尺寸的限制,有时候尺寸太大就需要变小,为了确保上传成功,我们需要将图片进行裁…