docker-compose部署flume

news2024/11/15 10:48:03

一、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
└─conf
        exec_flume.sh
        flume-conf.properties.template
        flume-env.ps1.template
        flume-env.sh
        flume-env.sh.template
        log4j.properties
        send-test-flume.conf
        test-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/flume
      args:
        TZ: "$TZ"
    image: flume
    expose:
      - 15510
    ports:
      - "15510:15510"
    container_name: flume
    environment:
  	  JAVA_HOME: "/usr/local/java/jdk1.8.0_202"
    restart: always
    network_mode: bridge
    privileged: true
    volumes:
      - ./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" ] ; then
   echo "param process is empry"
   exit 1
fi
# 代理名称
AgentName=$3
if [ ! -n "$AgentName" ] ; then
   echo "param AgentName is empry"
   exit 1
fi
JAR="flume"
function start(){
   if [ ! -f "$flumePath/conf/$process" ] ; then
      echo "file $flumePath/conf/$process no exists"
      exit 1
   fi
   num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`
   echo "ps -ef|grep java|grep $JAR|grep $AgentName|wc -l"
   if [ "$num" = "0" ] ; then
      if [ ! -d "/usr/local/flume/logs/game_log/" ];then
        mkdir /usr/local/flume/logs/game_log
      fi
      if [ ! -d "/usr/local/flume/logs/flume_log/" ];then
        mkdir /usr/local/flume/logs/flume_log
      fi
      nohup 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"
    else
      echo "进程已经存在,启动失败,请检查....."
    exit 0
   fi
}

function stop(){
   num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`
   if [ "$num" != "0" ] ; then
      ps -ef|grep java|grep $JAR|grep $AgentName|awk '{print $2;}'|xargs kill
      echo "进程已经关闭..."
   else
      echo "服务未启动,无需停止..."
   fi
}

function restart(){
   if [ ! -f "$flumePath/conf/$process" ] ; then
      echo "file $flumePath/conf/$process no exists"
      exit 1
   fi
   echo "begin stop process ..."
   stop
   # 判断程序是否彻底停止
   num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`
   while [ $num -gt 0 ]; do
      sleep 1
      num=`ps -ef|grep java|grep $JAR|grep $AgentName|wc -l`
   done
   echo "process stoped,and starting ..."
   start
   echo "started ..."
}

case "$1" in
    "start")
      start $@
      exit 0
    ;;
    "stop")
      stop
      exit 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.0
    container_name: flume-01
    hostname: flume-01
    restart: always
    ports:
      - "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.jar
    environment:
      JAVA_HOME: "/usr/java/jdk1.8.0_202-amd64/"
    depends_on:
      - kafka-01
      - kafka-02
      - kafka-03

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

鸿蒙Hi3861学习六-Huawei LiteOS(软件定时器)

一、简介 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器。当经过设定的Tick时钟计数值后,会触发用户定义的回调函数。定时精度与系统Tick时钟周期有关。 硬件定时器受硬件的限制,数量上不足以满足用户的实际需求。因此&#xff0…

【算法】什么是离散化

作者:指针不指南吗 专栏:算法篇 🐾人类做题的过程,就是个暴搜的过程🐾 文章目录 1.引入2.思路3.模板题 1.引入 特指有序、整数的离散化。 离散化,本质上是一种哈希,它在保持原序列大小关系的前…

肝一肝设计模式【六】-- 装饰器模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 文章目录 系列文章目录前言一、什么是装饰器模…

PLSQL Developer远程连接Oracle报错提示:“ORA-12541:TNS:无监听程序”的解决方案及思路

环境: 1、Windows Server 2、远程Oracle数据库:Oracle11g R2 3、PL/SQL程序:PL/SQL Developer Version 11.0.5.1790 (64 bit) 一、思路拆解: 此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态&#x…

DolphinScheduler 3.1.4详细教程

文章目录 第一章 DolphinScheduler介绍1.1 关于DolphinScheduler1.2 特性1.3 名词解释1.3.1 名词解释1.3.2 模块介绍 第二章 DolphinScheduler系统架构2.1 系统架构图2.2 架构说明该服务包含: 2.3 启动流程活动图2.4 架构设计思想2.4.1 去中心化vs中心化2.4.1.1 中心…

制作帮助中心过程中常见的误区与解决方法?

制作帮助中心是为了帮助用户了解产品和解决问题的重要手段。然而,在制作的过程中,我们可能会遇到一些误区,这些误区可能会导致我们的帮助中心无法达到预期的效果。因此,在本文中,我们将探讨制作帮助中心过程中常见的误…

今年产品经理这么卷,大家怎么面试的呢?

随着互联网行业的快速发展,产品经理这个职位变得越来越重要。产品经理需要具备多方面的能力,如市场调研、用户需求分析、产品设计、项目管理等等。因此,对于企业来说,招聘一名合适的产品经理是非常关键的。 而对于求职者来说&…

中国奇人周兴和——记四川星河建材有限公司董事长周兴和(中)

经商送礼 关押收审 从10多岁就开始闯荡社会的周兴和,可以说是社会大熔炉锻炼出来的奇人。他仅有小学文化程度,但是他的社会经验和社会知识却相当丰富,可以称得上是一个“社会学专家”。他口才超常,其处事能力、应变能力和综合能力…

ASEMI代理ADUM1250ARZ-RL7原装ADI车规级ADUM1250ARZ-RL7

编辑:ll ASEMI代理ADUM1250ARZ-RL7原装ADI车规级ADUM1250ARZ-RL7 型号:ADUM1250ARZ-RL7 品牌:ADI/亚德诺 封装:SOIC-8-150mil 批号:2023 引脚数量:8 工作温度:-40C~105C 安装类型&#…

4.7亿加元!爱立信和加拿大政府巨额投资量子计算

​ (图片来源:网络) 爱立信与加拿大政府的研发合作为期五年,项目价值超过4.7亿加元(约合23.9亿元人民币),主要投入在爱立信位于安大略省渥太华和魁北克省蒙特利尔的工厂。预计将创造数百个工作…

三十岁成功入职京东啦!

我是小九小九不爱喝酒: 自己工作5年后,我成功拿到了京东的offer。下面说下我是如何从传统行业到京东的经历,希望能对你有所帮助。 本科我学的是机械电子工程专业,2013年本科毕业后,同学们大多到各研究所从事智能机器人…

真题详解(归纳法)-软件设计(六十七)

真题详解(关系模型)-软件设计(六十六)https://blog.csdn.net/ke1ying/article/details/130495791 1、2018上半年 将小阶向大阶对奇,尾数右移动 解析: 0.23 * 10的2次方 0.22 *10的3次方 第一步:0.023*10的3次方,…

2022年收入增长23%,23年Q1大涨85%,上市后英方软件交出了一份亮眼的答卷

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2023年4月26日,英方软件(688435)公布了上市后首个业绩报告,包括2022年度财报和2023年第一季度财报。披露财报显示,英方软件在2022年实现营业收入1.97亿元&#xff…

ZC706P试验PL_DDR3内存条的步骤方法

ZC706P 板卡完全兼容XILINX官方的ZC706,当然也支持PL外挂的1G的DDR3内存条,这个片BLOG我提供从官方下载的一个文档和一个项目,演示一下验证DDR3的步骤。 步骤1:准备好板子,安装好软件。 链接:https://pan.baidu.com/s…

《创造》人生旅程

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

日志项目之——将kafka数据存入hbase中

目录 1.添加依赖 2.在hbase shell界面中分别输入下面的语句&#xff0c;创建namespace和表 3.UserFriendToHB 4.UsersToHB 5.TrainToHB 6.EventsToHB 7.EventAttendeToHb 1.添加依赖 <dependencies><dependency><groupId>junit</groupId><a…

软考信管高级——成本管理

成本管理内容 成本基准 成本基准是经过批准的&#xff0c;不包括管理储备&#xff0c;只有正式变更流程才能变更成本基准成本基准管理储备项目预算&#xff0c;有必要动用管理储备变更时&#xff0c;获变更批准后&#xff0c;把适量管理储备移入成本基准中 应急储备和管理储备…

Map接口以及Collections工具类

文章目录 1.Map接口概述1.1 Map的实现类的结构1.2 Map中存储的key-value结构的理解1.3 HashMap的底层实现原理(以JDK7为例)1.4 Map接口的常用方法1.5 TreeMap1.6 Map实现类之五: Properties 1.Collections工具类1.1方法1.1.1 排序操作(均为static方法)1.1.2 查找、替换 1.Map接…

PMP项目管理-[第八章]质量管理

质量管理知识体系&#xff1a; 规划质量管理&#xff1a; 管理质量&#xff1a; 控制质量 &#xff1a; 8.1 质量和等级的区别 质量定义&#xff1a;作为实现的性能或成果&#xff0c;是一系列内在特性满足要求的程度 等级定义&#xff1a;作为设计意图&#xff0c;是对用途相同…