Flume+kafka部署方案

将Flume部署到应用服务器中

 Source、Channel、Sink有哪些类型
    Flume Source
    Source类型                   | 说明
    Avro Source                 | 支持Avro协议(实际上是Avro RPC),内置支持
    Thrift Source               | 支持Thrift协议,内置支持
    Exec Source                 | 基于Unix的command在标准输出上生产数据
    JMS Source                   | 从JMS系统(消息、主题)中读取数据
    Spooling Directory Source | 监控指定目录内数据变更
    Twitter 1% firehose Source|    通过API持续下载Twitter数据,试验性质
    Netcat Source               | 监控某个端口,将流经端口的每一个文本行数据作为Event输入
    Sequence Generator Source | 序列生成器数据源,生产序列数据
    Syslog Sources               | 读取syslog数据,产生Event,支持UDP和TCP两种协议
    HTTP Source                 | 基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式
    Legacy Sources               | 兼容老的Flume OG中Source(0.9.x版本)

    Flume Channel
    Channel类型       说明
    Memory Channel                | Event数据存储在内存中
    JDBC Channel                  | Event数据存储在持久化存储中,当前Flume Channel内置支持Derby
    File Channel                  | Event数据存储在磁盘文件中
    Spillable Memory Channel   | Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件
    Pseudo Transaction Channel | 测试用途
    Custom Channel                | 自定义Channel实现

    Flume Sink
    Sink类型     说明
    HDFS Sink             | 数据写入HDFS
    Logger Sink           | 数据写入日志文件
    Avro Sink             | 数据被转换成Avro Event,然后发送到配置的RPC端口上
    Thrift Sink           | 数据被转换成Thrift Event,然后发送到配置的RPC端口上
    IRC Sink              | 数据在IRC上进行回放
    File Roll Sink         | 存储数据到本地文件系统
    Null Sink             | 丢弃到所有数据
    HBase Sink             | 数据写入HBase数据库
    Morphline Solr Sink | 数据发送到Solr搜索服务器(集群)
    ElasticSearch Sink     | 数据发送到Elastic Search搜索服务器(集群)
    Kite Dataset Sink     | 写数据到Kite Dataset,试验性质的
    Custom Sink           | 自定义Sink实现
    Kafka Sink           | 数据写到Kafka

一、Flume安装

Flume是Java开发的,所以先得安装JDK。

  1. 安装包
1)下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz
2)解压
tar –zxvf apache-flume-1.8.0-bin.tar.gz
mv apache-flume-1.8.0-bin /usr/local/flume
  1. 配置环境变量

vim /etc/profile

export FLUME_HOME=/usr/local/flume
export PATH=$PATH:$FLUME_HOME/bin

source /etc/profile

  1. 配置flume
cd /usr/local/flume

cp flume-env.sh.template flume-env.sh
#修改JAVA_HOME
vim flume-env.sh
export JAVA_HOME=/root/java/jdk1.8

  1. 验证
flume-ng version

Flume 1.8.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 99f591994468633fc6f8701c5fc53e0214b6da4f
Compiled by denes on Fri Sep 15 14:58:00 CEST 2017
From source with checksum fbb44c8c8fb63a49be0a59e27316833d

二、Flume配置

根据需求修改/usr/local/flume/conf/flume.conf文件

1.监控指定目录下的指定日志文件(Exec Source)
  • Flume配置文件
1.1 未对接Kafka(本地测试)
agent.sources = s1                              
agent.channels = c1                                 
agent.sinks = k1 

#sources设置
agent.sources.s1.type=exec   
#这里取了指定任务日志文件作为监控源,指定任何有流式输入的文件均可
agent.sources.s1.command=tail -F /tmp/data/flume/flume.log  

#channel设置
agent.channels.c1.type=file

#存放检查点目录,checkpointDir是一个目录
agent.channels.c1.checkpointDir = /tmp/data/flume/checkpoint 
#备份目录
agent.channels.c1.backupCheckpointDir = /tmp/data/flume/backupCheckpointDir 


#存放数据的目录,dataDirs可以是多个目录,以逗号隔开。用独立的多个磁盘上的多个目录可以提高file channel的性能
agent.channels.c1.dataDirs = /tmp/data/flume/dataDir        
#通道中存储的最大事件数
agent.channels.c1.capacity=1000000 
#每个事务通道从source或提供给sink的最大事件数,不大于capacity
agent.channels.c1.transactionCapacity=10000

# 使用channel将source和sink连接起来
agent.sources.s1.channels = c1
agent.sinks.k1.channel = c1

1.2 对接Kafka
agent.sources = s1                              
agent.channels = c1                                 
agent.sinks = k1 

#sources设置
agent.sources.s1.type=exec   
#这里取了指定任务日志文件作为监控源,指定任何有流式输入的文件均可
agent.sources.s1.command=tail -F /tmp/data/flume/flume.log
agent.sources.s1.channels=c1   

#channel设置
agent.channels.c1.type=file

#存放检查点目录,checkpointDir是一个目录
agent.channels.c1.checkpointDir = /tmp/data/flume/checkpoint 
#备份目录
agent.channels.c1.backupCheckpointDir = /tmp/data/flume/backupCheckpointDir 
#存放数据的目录,dataDirs可以是多个目录,以逗号隔开。用独立的多个磁盘上的多个目录可以提高file channel的性能
agent.channels.c1.dataDirs = /tmp/data/flume/dataDir        
#通道中存储的最大事件数
agent.channels.c1.capacity=1000000 
#每个事务通道从source或提供给sink的最大事件数,不大于capacity
agent.channels.c1.transactionCapacity=10000       


#设置Kafka接收器                                 
agent.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink                                                                         
#设置Kafka的broker地址和端口号                   
agent.sinks.k1.brokerList=zk-master01:9092,zk-slaver01:9092,zk-slaver02:9092        
#设置Kafka的指定Topic                              
agent.sinks.k1.topic=my-topic                                                              
#设置序列化方式                                    
agent.sinks.k1.serializer.class=kafka.serializer.StringEncoder                                      
agent.sinks.k1.channel=c1 
2.监控指定目录下的新增文件(Spooling Directory Source)
2.1 未对接Kafka(本地测试)
agent.sources = r1
agent.sinks = k1
agent.channels = c1

# Describe/configure the source
agent.sources.r1.type = spooldir
agent.sources.r1.spoolDir = /tmp/data/flume
agent.sources.r1.fileHeader = true

# Describe the sink
agent.sinks.k1.type = logger

# Use a channel which buffers events in memory
agent.channels.c1.type=file

#存放检查点目录,checkpointDir是一个目录
agent.channels.c1.checkpointDir = /tmp/data/flume/checkpoint 
#备份目录
agent.channels.c1.backupCheckpointDir = /tmp/data/flume/backupCheckpointDir 
#存放数据的目录,dataDirs可以是多个目录,以逗号隔开。用独立的多个磁盘上的多个目录可以提高file channel的性能
agent.channels.c1.dataDirs = /tmp/data/flume/dataDir        
#通道中存储的最大事件数
agent.channels.c1.capacity=1000000 
#每个事务通道从source或提供给sink的最大事件数,不大于capacity
agent.channels.c1.transactionCapacity=10000

# Bind the source and sink to the channel
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
2.2 对接Kafka
agent.sources = s1                                                              
agent.sinks = k1 
agent.channels = c1 

#sources设置
agent.sources.s1.type=spooldir   
#这里取了指定目录作为监控源,监控新增文件
agent.sources.s1.spoolDir = /tmp/data/flume
agent.sources.s1.fileHeader = true

agent.sources.s1.channels=c1   

#channel设置
agent.channels.c1.type=file

#存放检查点目录,checkpointDir是一个目录
agent.channels.c1.checkpointDir = /tmp/data/flume/checkpoint 
#备份目录
agent.channels.c1.backupCheckpointDir = /tmp/data/flume/backupCheckpointDir 
#存放数据的目录,dataDirs可以是多个目录,以逗号隔开。用独立的多个磁盘上的多个目录可以提高file channel的性能
agent.channels.c1.dataDirs = /tmp/data/flume/dataDir        
#通道中存储的最大事件数
agent.channels.c1.capacity=1000000 
#每个事务通道从source或提供给sink的最大事件数,不大于capacity
agent.channels.c1.transactionCapacity=10000
   
#sink设置   
#设置Kafka接收器                                 
agent.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink                                                                         
#设置Kafka的broker地址和端口号                   
agent.sinks.k1.brokerList=zk-master01:9092,zk-slaver01:9092,zk-slaver02:9092       
#设置Kafka的指定Topic                              
agent.sinks.k1.topic=test-1016                                                              
#设置序列化方式                                    
agent.sinks.k1.serializer.class=kafka.serializer.StringEncoder                                      
agent.sinks.k1.channel=c1

3.启动
3.1正常启动
flume-ng agent \
--name agent \
--conf $FLUME_HOME/conf \
--conf-file $FLUME_HOME/conf/flume.conf \
-Dflume.root.logger=INFO,console
3.2http监控启动方式
flume-ng agent \
--name agent \
--conf $FLUME_HOME/conf \
--conf-file $FLUME_HOME/conf/flume.conf \
-Dflume.root.logger=INFO,console  \
-Dflume.monitoring.type=http  \
-Dflume.monitoring.port=5653

这种启动方式,flume监控链接http://zk-master01:5653/metrics,获取flume运行参数信息,如下所示:

{
  "SOURCE.s1": {
    "StopTime": "0",                  //source组件停止时间
    "AppendBatchReceivedCount": "0",  //source端刚刚追加的批量的数量,比如一批100,该度量为2,就是source端收到了200个events
    "EventReceivedCount": "4913189",  //source端累计收到的event数量
    "AppendBatchAcceptedCount": "0",  //source端追加到channel的数量
    "Type": "SOURCE",
    "EventAcceptedCount": "4912519",  //source端累计成功放入channel的event数量
    "AppendReceivedCount": "0",       //source端刚刚追加的且目前已收到的event数量
    "StartTime": "1496839492821",     //source组件启动的时间
    "AppendAcceptedCount": "0",       //source端刚刚追加放入channel的event数量
    "OpenConnectionCount": "0"        //当前有效的连接数
  },
  "CHANNEL.c1": {
    "StopTime": "0",                       //channel组件停止时间
    "EventPutSuccessCount": "4912519",     //成功放入channel的event数量
    "ChannelCapacity": "200000",           //channel容量
    "ChannelFillPercentage": "5.0E-4",     //channel使用比例
    "Type": "CHANNEL",
    "ChannelSize": "1",                    //目前在channel中的event数量
    "EventTakeSuccessCount": "4912589",    //从channel中成功取出event的数量
    "EventTakeAttemptCount": "4912661",    //正在从channel中取event的数量
    "StartTime": "1496839492318",          //channel组件启动时间
    "EventPutAttemptCount": "4912519"      //正在放进channel的event数量
  },
  "SINK.k1": {
    "StopTime": "0",                       //sink组件停止时间
    "KafkaEventSendTimer": "403088",       //从channel批量取event,并成功发送到kafka的耗时,单位:毫微秒
    "EventDrainSuccessCount": "4912589",   //sink成功发送出的event数量
    "RollbackCount": "0",                  //失败回滚的event数量
    "Type": "SINK",
    "ConnectionCreatedCount": "0",         //连接被创建的数量
    "BatchCompleteCount": "0",             //成功完成输出的批量事件个数
    "BatchEmptyCount": "62",               //批量取空的数量
    "EventDrainAttemptCount": "0",         //试图从channel消耗的事件数量
    "StartTime": "1496839492829",          //sink组件开始时间
    "BatchUnderflowCount": "8",            //正处于批量处理的batch数
    "ConnectionFailedCount": "0",          //连接失败数
    "ConnectionClosedCount": "0"           //连接关闭数
  }
}

三、CDH上kafka集群的安装

1.kafka基本概念

1、消费者:(Consumer):从消息队列中请求消息的客户端应用程序

2、生产者:(Producer) :向broker发布消息的应用程序

3、AMQP服务端(broker):用来接收生产者发送的消息并将这些消息路由给服务器中的队列,便于fafka将生产者发送的消息,动态的添加到磁盘并给每一条消息一个偏移量,所以对于kafka一个broker就是一个应用程序的实例

4、主题(Topic):一个主题类似新闻中的体育、娱乐、教育等分类概念,在实际工程中通常一个业务一个主题。

5、分区(Partition):一个Topic中的消息数据按照多个分区组织,分区是kafka消息队列组织的最小单位,一个分区可以看作是一个FIFO( First Input First Output的缩写,先入先出队列)的队列。

kafka分区是提高kafka性能的关键所在,当你发现你的集群性能不高时,常用手段就是增加Topic的分区,分区里面的消息是按照从新到老的顺序进行组织,消费者从队列头订阅消息,生产者从队列尾添加消息。

2.kafka安装包准备

csd包:http://archive.cloudera.com/csds/kafka/

parcel包: http://archive.cloudera.com/kafka/parcels/latest/

3.集成

1、将原来Kafka的在CDH中删除

2、csd包放到CDH安装节点下的 /opt/cloudera/csd目录下

3、将parcel包放到CDH安装节点下的/opt/cloudera/parcel-repo目录下

4.启动CDH,在主机–>parcel,点击检查新parcel,就会发现刚刚新增的kafka parcel,分配激活。

5.现在就可以在CDH主界面的服务列表选项中添加kafka服务。

4.验证

输入命令 jps

5.kafka基本命令
5.1.创建topic
/bin/kafka-topics --create --zookeeper zk-master01:2181 --replication-factor 1 --partitions 1 --topic test-1016
5.2.查看所有topics
/bin/kafka-topics --list --zookeeper zk-master01:2181
5.3.查看指定topic信息
/bin/kafka-topics --zookeeper zk-master01:2181 --topic test-1016 --describe

Topic:test-1016	
PartitionCount:1	ReplicationFactor:1	
Configs:
	Topic: test-1016	Partition: 0	
	Leader: 199	Replicas: 199	
	Isr: 199


5.4.创建一个消息生产者
/bin/kafka-console-producer --broker-list zk-master01:9092 --topic test-1016

/bin/kafka-console-producer --broker-list zk-master01:9092,zk-slaver01:9092,zk-slaver02:9092 --topic test-1016
5.5.创建一个消息消费者
/bin/kafka-console-consumer --zookeeper zk-master01:2181 --topic test-1016 --from-beginning

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值