一、flume和kafka为什么要结合使用
1.Flume 和 Kafka 都是用于处理大量数据的工具,但它们的设计目的不同。Flume 是一个可靠地收集、聚合和移动大量日志和事件数据的工具,而Kafka则是一个高吞吐量的分布式消息队列,用于将大量数据流式传输到各个系统中。
因此,结合使用Flume和Kafka可以实现更好的数据处理和分发。Flume可以将数据从多个源收集和聚合,然后将其发送到Kafka中,Kafka可以将数据分发到多个消费者和系统中。这种结合使用可以实现更好的数据流控制和分配,提高数据处理效率和数据可靠性。
2.使用Kafka作为Flume的Sink
将Flume的数据通过Flume-Kafka Sink发送到Kafka Topic中。这种方式可以实现数据的实时转发和分发,同时保证数据的可靠性和可恢复性。
3.使用Flume的Kafka Source
通过Flume的Kafka Source从Kafka Topic中读取数据,然后将数据发送到下游系统中。这种方式可以保证数据的可靠性和高效性,同时可以实现数据的多级处理和转发。
二、 编写Flume+kafka配置文件
1.编写exec-mem-kafka配置文件
①切换目录
cd /opt/server/flume/file/
②修改exec-mem-kafka配置文件
vim commodity_click-exec-mem-kafka.conf
③打开Flume中文网
Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了 (liyifeng.org)
④查找Exec Source
⑤查找Memory Channel
l⑥查找Kafka Sink
⑦编辑exec-mem-kafka配置文件
#别名
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#sources
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
#channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
#sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = mytopic
a1.sinks.k1.kafka.bootstrap.servers = 192.168.229.111:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 50
#连接
a1.sources.r1.channels = c1
a1.sinks.k1.channels = c1
2.编辑kafka-mem-hdfs配置文件
①创建文件
vim commodity_click-kafka-mem-hdfs.conf
②查看配置参数
③编辑配置参数
a1.sources = s1
a1.channels = c1
a1.sinks = k1#sources
a1.sources.s1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.s1.batchSize = 100
a1.source.s1.batchDurationMillis = 2000
a1.sources.source1.kafka.bootstrap.servers = 192.168.229.111:9093,192.168.229.112:9093,192.168.229.113:9093
a1.sources.s1.kafka.topics = commodity
a1.sources.s1.kafka.consumer.group.id = first_test
a1.sources.s1.kafka.consumer.auto.offset.reset = earliest#channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000#sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = commodity-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollSize = 0
a1.sinks.k1.hdfs.rollCount = 5000
a1.sinks.k1.hdfs.useLocalTimeStamp = truea1.sinks.k1.hdfs.fileType = DataStream
#连接
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
3.创建主题
①启动zk集群
./zk.sh start
出现的问题:zk脚本文件未启动成功
首先我们要启动三台zk集群
然后再启动zk脚本文件,就可以了
②查看zk集群状态
./zk.sh status
③启动kafka集群
./kafka.sh start
④查看进程
./xcall.sh jps
⑤切换kafka的bin目录
cd /opt/server/kafka/bin/
⑥创建主题
kafka-topics.sh --create --bootstrap-server hadoop1:9092,hadoop2:9092,hadoop3:9092 --replication-factor 3 --partitions 3 --topic commodity
⑦查看主题
kafka-topics.sh --list --bootstrap-server hadoop1:9092,hadoop2:9092,hadoop3:9092
⑧关闭kafka集群
⑨关闭zk集群