• Flume2-高可用+拦截器


    13-flume高可用-failover-模型分析(搭建一个Flume集群,当一个Flume挂掉之后,其他flume迅速补上)

     

     ============================================================================================================================================================

    14-flume高可用-failover-配置文件编写

     

    vim agent.conf
     
    #agent1 name
    agent1.channels = c1
    agent1.sources = r1
    agent1.sinks = k1 k2
    #
    ##set gruop
    agent1.sinkgroups = g1
    #
    agent1.sources.r1.channels = c1
    agent1.sources.r1.type = exec
    agent1.sources.r1.command = tail -F /export/servers/taillogs/access_log
    #
    ##set channel
    agent1.channels.c1.type = memory
    agent1.channels.c1.capacity = 1000
    agent1.channels.c1.transactionCapacity = 100
    #
    ## set sink1
    agent1.sinks.k1.channel = c1
    agent1.sinks.k1.type = avro
    agent1.sinks.k1.hostname = node02
    agent1.sinks.k1.port = 52020
    #
    ## set sink2
    agent1.sinks.k2.channel = c1
    agent1.sinks.k2.type = avro
    agent1.sinks.k2.hostname = node03
    agent1.sinks.k2.port = 52020
    #
    ##set sink group
    agent1.sinkgroups.g1.sinks = k1 k2
    #
    ##set failover
    agent1.sinkgroups.g1.processor.type = failover
    agent1.sinkgroups.g1.processor.priority.k1 = 10
    agent1.sinkgroups.g1.processor.priority.k2 = 1
    agent1.sinkgroups.g1.processor.maxpenalty = 10000

     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    cd /export/servers/apache-flume-1.8.0-bin/conf
     
    vim collector.conf
     
     
    #set Agent name
    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1
    #
    ##set channel
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    #
    ## other node,nna to nns
    a1.sources.r1.type = avro
    a1.sources.r1.bind = node02
    a1.sources.r1.port = 52020
    a1.sources.r1.channels = c1
    #
    ##set sink to hdfs
    a1.sinks.k1.type=hdfs
    a1.sinks.k1.hdfs.path= hdfs://node01:8020/flume/failover/
    a1.sinks.k1.hdfs.fileType=DataStream
    a1.sinks.k1.hdfs.writeFormat=TEXT
    a1.sinks.k1.hdfs.rollInterval=10
    a1.sinks.k1.channel=c1
    a1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
    #
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    cd /export/servers/apache-flume-1.8.0-bin/conf

    vim collector.conf
     
    #set Agent name
    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1
    #
    ##set channel
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    #
    ## other node,nna to nns
    a1.sources.r1.type = avro
    a1.sources.r1.bind = node03
    a1.sources.r1.port = 52020
    a1.sources.r1.channels = c1
    #
    ##set sink to hdfs
    a1.sinks.k1.type=hdfs
    a1.sinks.k1.hdfs.path= hdfs://node01:8020/flume/failover/
    a1.sinks.k1.hdfs.fileType=DataStream
    a1.sinks.k1.hdfs.writeFormat=TEXT
    a1.sinks.k1.hdfs.rollInterval=10
    a1.sinks.k1.channel=c1
    a1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
    ==================================================================================================================================================
    15-flume高可用-failover-测试运行
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n a1 -c conf -f conf/collector.conf -Dflume.root.logger=DEBUG,console
     
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n a1 -c conf -f conf/collector.conf -Dflume.root.logger=DEBUG,console
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n agent1 -c conf -f conf/agent.conf -Dflume.root.logger=DEBUG,console
    cd /export/servers/shells
    sh tail-file.sh
    ==========================================================================================================================================
    16-flume高可用-balance-配置文件编写

     

    vim load_banlancer_client.conf
     
    # agent name
    a1.channels = c1
    a1.sources = r1
    a1.sinks = k1 k2
    # set gruop
    a1.sinkgroups = g1
    # set channel
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    a1.sources.r1.channels = c1
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /export/servers/taillogs/access_log
    # set sink1
    a1.sinks.k1.channel = c1
    a1.sinks.k1.type = avro
    a1.sinks.k1.hostname = node02
    a1.sinks.k1.port = 52020
    # set sink2
    a1.sinks.k2.channel = c1
    a1.sinks.k2.type = avroa1.sinks.k2.hostname = node03
    a1.sinks.k2.port = 52020
    # set sink group
    a1.sinkgroups.g1.sinks = k1 k2
    # set failover
    a1.sinkgroups.g1.processor.type = load_balance
    a1.sinkgroups.g1.processor.backoff = true
    a1.sinkgroups.g1.processor.selector = round_robin
    a1.sinkgroups.g1.processor.selector.maxTimeOut=10000 

     轮询:node02接收一条,node03接收一条,然后,node02再接收一条,node03再接收一条,node02和node03轮流接收

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    vim load_banlancer_server.conf
     
    # Name the components on this agent
    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 = node02
    a1.sources.r1.port = 52020
    # 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
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    vim load_banlancer_server.conf

    # Name the components on this agent

    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 = node03
    a1.sources.r1.port = 52020
    # 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
    ==================================================================================================================================
    17-flume高可用-balance-测试运行
    启动node03的flflume服务
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n a1 -c conf -f conf/load_banlancer_server.conf -Dflume.root.logger=DEBUG,console
    启动node02的flflume服务
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n a1 -c conf -f conf/load_banlancer_server.conf -Dflume.root.logger=DEBUG,console
    启动node01的flflume服务
    cd /export/servers/apache-flume-1.8.0-bin
    bin/flume-ng agent -n a1 -c conf -f conf/load_banlancer_client.conf -Dflume.root.logger =DEBUG,console
    -------------------------------------------------------------------------------------------------------------------------------------------------
    =============================================================================================================================================
    18-flume拦截器-模型分析

    vim exec_source_avro_sink.conf
     
    # Name the components on this agent
    a1.sources = r1 r2 r3
    a1.sinks = k1
    a1.channels = c1
    # Describe/configure the source
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /export/servers/taillogs/access.log
    a1.sources.r1.interceptors = i1
    a1.sources.r1.interceptors.i1.type = static
    ## static拦截器的功能就是往采集到的数据的header中插入自己定## 义的key-value对
    a1.sources.r1.interceptors.i1.key = type
    a1.sources.r1.interceptors.i1.value = access
    a1.sources.r2.type = exec
    a1.sources.r2.command = tail -F /export/servers/taillogs/nginx.log
    a1.sources.r2.interceptors = i2
    a1.sources.r2.interceptors.i2.type = static
    a1.sources.r2.interceptors.i2.key = type
    a1.sources.r2.interceptors.i2.value = nginx
    a1.sources.r3.type = exec
    a1.sources.r3.command = tail -F /export/servers/taillogs/web.log
    a1.sources.r3.interceptors = i3
    a1.sources.r3.interceptors.i3.type = static
    a1.sources.r3.interceptors.i3.key = type
    a1.sources.r3.interceptors.i3.value = web
    # Describe the sink
    a1.sinks.k1.type = avro
    a1.sinks.k1.hostname = node03
    a1.sinks.k1.port = 41414
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 20000
    a1.channels.c1.transactionCapacity = 10000
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sources.r2.channels = c1
    a1.sources.r3.channels = c1
    a1.sinks.k1.channel = c1

     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    vim avro_source_hdfs_sink.conf

    a1.sources = r1

    a1.sinks = k1
    a1.channels = c1
    # 定义source
    a1.sources.r1.type = avro
    a1.sources.r1.bind = node03
    a1.sources.r1.port =41414
    # 添加时间拦截器
    a1.sources.r1.interceptors = i1
    a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
    # 定义channels
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 20000
    a1.channels.c1.transactionCapacity = 10000
    # 定义sink
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path=hdfs://node01:8020/source/logs/%{type}/%Y%m%d
    a1.sinks.k1.hdfs.filePrefix =events
    a1.sinks.k1.hdfs.fileType = DataStream
    a1.sinks.k1.hdfs.writeFormat = Text
    # 时间类型
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    # 生成的文件不按条数生成
    a1.sinks.k1.hdfs.rollCount = 0
    # 生成的文件按时间生成
    a1.sinks.k1.hdfs.rollInterval = 30
    # 生成的文件按大小生成
    a1.sinks.k1.hdfs.rollSize = 10485760
    # 批量写入hdfs的个数
    a1.sinks.k1.hdfs.batchSize = 10000
    # flume操作hdfs的线程数(包括新建,写入等)
    a1.sinks.k1.hdfs.threadsPoolSize=10
    # 操作hdfs超时时间<p class="mume-header " id="操作hdfs超时时间"></p>
    a1.sinks.k1.hdfs.callTimeout=30000
    # 组装source、channel、sink
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

    ========================================================================================================================================================

    20-flume拦截器-测试运行

    vim server.sh
     
    # !/bin/bash
    while true
    do
    date >> /export/servers/taillogs/access.log;
    date >> /export/servers/taillogs/web.log;
    date >> /export/servers/taillogs/nginx.log;
    sleep 0.5;
    done 

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    node03启动flflume实现数据收集
    cd /export/servers/apache-flume-1.6.0-cdh5.14.0-bin
    bin/flume-ng agent -c conf -f conf/avro_source_hdfs_sink.conf -name a1 -Dflume.root.logger=DEBUG,console
     
    node01与node02启动flflume实现数据监控
    cd /export/servers/apache-flume-1.6.0-cdh5.14.0-bin
    bin/flume-ng agent -c conf -f conf/exec_source_avro_sink.conf -name a1 -Dflume.root.logger=DEBUG,console
     
    node01与node02启动生成文件脚本
    cd /export/servers/shells
    sh server.sh 

     
     
  • 相关阅读:
    凭这份pdf让我轻松拿下了蚂蚁金服、字节跳动、小米等大厂的offer
    阿里面试官看了我写的多线程博文,反问你也看过那本的(多线程)
    Docker简介及基本使用
    springboot常见问题之Rustful风格下,@PutMapping、@@DeleteMapping失效问题
    SpringBoot之国际化功能
    SpringBoot之Thymeleaf模板引擎
    SpringBoot之静态资源处理
    SpringBoot 配置原理
    SpringBoot: 配置文件用法
    SpringBoot版hello world
  • 原文地址:https://www.cnblogs.com/curedfisher/p/12637918.html
Copyright © 2020-2023  润新知