
1. 配置Flume
cd $FLUME_HOME/conf
vim flume-kafka-conf.properties
# 分别给agent中组件定义别名
# a1为当前组件的名字
# 表示agent中的source组件
a1.sources = r1
# 表示的是下沉组件sink
a1.sinks = k1 k2
# agent内部的数据传输通道channel,用于从source将数据传递到sink
a1.channels = c1 c2
# 配置接收方法、地址和端口号
# 描述和配置source组件:r1
# netcat用于监听一个端口的
a1.sources.r1.type = netcat
#配置的绑定地址
a1.sources.r1.bind = 127.0.0.1
#配置的绑定端口
a1.sources.r1.port = 10050
# 定义sink
#描述和配置sink k1组件
#type必须设置为org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#kafka中将发布消息的主题。如果配置了此参数,则消息将发布到该主题
a1.sinks.k1.kafka.topic = order
#a1.sinks.k1.kafka.bootstrap.servers=kafka集群地址
a1.sinks.k1.kafka.bootstrap.servers = bigdata1:9092,bigdata2:9092,bigdata3:9092
#一次性处理多少条数据,较大的批次可提高吞吐量,同时增加延迟
a1.sinks.k1.kafka.flumeBatchSize = 20
#在成功考虑一条消息之前,有多少个副本必须确认一条消息。值为1(仅等待领导者),以避免在某些领导者失败的情况下丢失数据
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
a1.sinks.k1.kafka.producer.compression.type = snappy
#描述和配置sink k2组件
a1.sinks.k2.type = hdfs
#HDFS路径,端口号是主节点中$HADOOP_HOME/etc/hadoop/core-site.xml文件中的hdfs端口号一样
a1.sinks.k2.hdfs.path = hdfs://bigdata1:9000/user/test/flumebackup/
#配置文件类型,默认是sequence
a1.sinks.k2.hdfs.fileType = DataStream
#保存数据文件的前缀名
a1.sinks.k2.hdfs.filePrefix = events-
#保存数据文件的后缀名
a1.sinks.k2.hdfs.fileSuffix = .log
#hdfs sink间隔多长将临时文件滚动成最终目标文件,设置成0,则表示不根据时间来滚动文件
a1.sinks.k2.hdfs.rollInterval = 0
a1.sinks.k2.hdfs.useLocalTimeStamp=true
# 定义channel类型
#描述和配置channel组件,此处使用时内存缓存的方式
#下面表示的是缓存到内存中,如果是文件,可以使用file的那种类型
a1.channels.c1.type = memory
#表示用多大的空间
a1.channels.c1.capacity = 1000
#下面表示用事务的空间是多大,事务容量要小于总容量
a1.channels.c1.transactionCapacity = 100
#下面表示的是缓存到内存中,如果是文件,可以使用file的那种类型
a1.channels.c2.type = memory
#表示用多大的空间
a1.channels.c2.capacity = 1000
#下面表示用事务的空间是多大,事务容量要小于总容量
a1.channels.c2.transactionCapacity = 100
# 把source和sink用channel连接
# 描述和配置source channel sink之间的连接关系,因为source和sink依赖channel来传递数据,所以要分别指定用的是哪个channel。
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2
2. 配置Kafka
三台服务器都配置,其中broker.id、advertised.listeners参数不一样,其它配置都一样
vim server.properties
############################# Server Basics #############################
#修改broker.id, kafka集群中的每个节点上都要唯一,bigdata1上为broker.id=0
broker.id=0
############################# Socket Sercd $KAFKA_HOME/configer Settings #############################
listeners=PLANTEXT://0.0.0.0:9092
# 配置监听,修改为本机ip或主机名
advertised.listeners=PLAINTEXT://bigdata1:9092
############################# Log Basics #############################
# kafka 运行日志和数据的存放路径
log.dirs=/opt/module/kafka-2.4.1/logs
# topic 在当前broker上的分片个数,与broker保持一致
num.partitions=3
#zookeeper.connection.timeout.ms=60000
############################# Zookeeper #############################
# 配置三台服务zookeeper连接地址
zookeeper.connect=bigdata1:2181,bigdata2:2181,bigdata3:2181/kafka
3. 配置Zookeeper
cd $ZOOKEEPER_HOME
#创建zookeeper数据目录
mkdir zkdata
#创建zookeeper日志目录
mkdir zklog
$ZOOKEEPER/conf目录下,三台服务器的zoo.cfg配置文件都一样
cd $ZOOKEEPER_HOME/conf
vim zoo.cfg
#修改zookeeper的数据目录路径
dataDir=/opt/module/zookeeper-3.5.7/zkdata
#注释掉 maxClientCnxns=0
#maxClientCnxns=0
#修改zookeeper日志目录
dataLogDir=/opt/module/zookeeper-3.5.7/zklog
#设置连接参数,添加如下配置
#zk的基本时间单元,毫秒
tickTime=200
#Leader-Follower初始通信时限tickTime*10
initLimit=10
#Leader-Follower初始通信时限tickTime*5
syncLimit=5
#客户端连接server的端口,对外服务端口
clientPort=2181
#设置broker Id的服务地址
server.1=bigdata1:2888:3888
server.2=bigdata2:2888:3888
server.3=bigdata3:2888:3888
4. 创建Topic(bigdata1)
cd $KAFKA_HOME
#--topic主题名
#--partitions分区个数
#--replication-factor副本个数
#分区个数大于或等于副本个数,不然会报错
bin/kafka-topics.sh --create --topic order --zookeeper bigdata1:2181,bigdata2:2181,bigdata3:2181/kafka --replication-factor 3 --partitions 4
5. 启动Flume监听(bigdata1)
首先确保Kafka和Zookeeper正在运行,且Flume配置正确,不然会报错
cd $FLUME_HOME
#conf/flume-kafka-conf.properties为Flume配置文件
bin/flume-ng agent -n a1 -c conf/ -f conf/flume-kafka-conf.properties -Dflume.root.logger=INFO,console
6. 开启消费者(bigdata3)
#在$KAFKA_HOME下运行
bin/kafka-console-consumer.sh --bootstrap-server bigdata1:9092,bigdata2:9092,bigdata3:9092 --topic order --from-beginning
7. 开启socket脚本生成实时数据(bigdata1)
假设实时数据生成器脚本为主节点/data_log目录下的gen_ds_data_to_socket脚本
cd /data_log
sudo chmod 777 gen_ds_data_to_socket
./gen_ds_data_to_socket
8. 查看消费者消费order的前两条数据
#查看前两条消息
#--from-beginning表示从头开始
#--max-messages 2表示限制两条消息
bin/kafka-console-consumer.sh --bootstrap-server bigdata1:9092,bigdata2:9092,bigdata3:9092 --topic order --from-beginning --max-messages 2
9. 查看备份目录下的第一个文件的前2条数据
cd $HADOOP_HOME
bin/hadoop fs -ls /user/test/flumebackup/
#<filename>为上条命令查看的第一个文件的文件名
bin/hadoop fs -cat /user/test/flumebackup/<filename> | head -n 2
第一条命令将列出备份目录中的所有文件,第二条命令将输出第一个文件的前两条数据。
本文详细介绍了如何配置ApacheFlume以从netcat源接收数据,通过Kafka发送至主题order,以及将数据备份到HDFS。同时,涉及了Kafka和Zookeeper的配置,包括创建主题、启动Flume监听、消费者消费和实时数据生成。
492

被折叠的 条评论
为什么被折叠?



