一、背景
Flume和Kafka都是Apache的开源项目。
1.Flume的优点和适用场景
支持的数据源较多、可自定义网络请求的安全配置(filter)
适合下游数据消费者不多的情况(一个消费者开一个channel)
适合数据安全性要求不高的操作(数据没有备份、没有副本)
适合与Hadoop生态圈对接的操作(HDFS、Hbase等)
2.Kafka的优点和适用场景
高负载、高可用、数据安全性高
适合数据下游消费众多的情况(kafka从磁盘读,并且只找Leader读)
适合数据安全性要求较高的操作,支持replication(多副本)
3.Flume的缺点
(1) 没有提供高可用机制(整合ZooKeeper)。当然,可以自行实现,但增加了成本
(2) 多数场景是配置成把数据保存在内存,如果内存爆了或突然宕机,数据容易丢失
(3) 如果配置成把数据保存在硬盘,没有分区(Partition)和冗余副本(Replication),大数据场景不适合单独使用
4.Kafka的缺点
(1) 旧版本的Kafka的接收端性能比Flume差
(2) 支持接收的数据源没Flume多
(3) 没有内置的过滤器(filter),例如,请求的过滤器。当然,可以自行实现,但增加了成本
5.整合使用
大数据场景下有3种选择:
(1) 数据发送端 -> Flume -> Kafka -> HBase/Hive/Solr/ES
(2) 数据发送端 -> Flume -> Kafka -> Java程序 -> HBase/Hive/Solr/ES
(3) 数据发送端 -> Flume -> Kafka -> Spark/Storm/Flink -> HBase/Hive/Solr/ES
二、预安装和部署
1.硬件环境
假设有4台机,IP及主机名如下:
192.168.100.105 c1 192.168.100.110 c2 192.168.100.115 c3 192.168.100.120 c4
Flume只部署在c1机,Kafka在4台机都部署。
2.软件环境
操作系统:Ubuntu Server 18.04
JDK:1.8.0
3.Flume的安装与部署
https://www.cnblogs.com/live41/p/15554223.html
4.Kafka的安装与部署
https://www.cnblogs.com/live41/p/15522443.html
三、整合配置
* 先登录root账号再进行以下操作
1.修改Flume配置
vim /home/flume/conf/flume-conf
把原来的配置修改为:
# Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source
# 如果是用Java通过Flume API发送数据,把netcat改成avro a1.sources.r1.type = netcat
a1.sources.r1.bind = c1 a1.sources.r1.port = 44444 # Describe the sink a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.topic = topic1 a1.sinks.k1.kafka.bootstrap.servers = c1:9092,c2:9092,c3:9092 a1.sinks.k1.serializer.class = kafka.serializer.StringEncoder # 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
四、操作
1.启动ZooKeeper
* 在每台机都要执行
zkServer.sh start
2.启动Kafka
* 在每台机都要执行
kafka-server-start.sh -daemon /home/kafka/config/server.properties
3.创建topic并启动topic的监听
* 在c2机执行
这里topic的名字是topic1
kafka-topics.sh --create --bootstrap-server c1:9092 --topic topic1 --partitions 8 --replication-factor 2 kafka-console-consumer.sh --bootstrap-server c1:9092 --topic topic1
4.启动Flume
* 在c1机执行
flume-ng agent -c conf/ -f /home/flume/conf/flume-conf -n a1 -Dflume.root.logger=INFO,console
5.命令测试
* 在c3机执行
telnet c1 44444
然后输入任意内容,看到c1和c2的窗口显示对应消息,就是部署成功了。
6.代码测试
* 在c3机执行
用Flume和Kafka的安装与部署文章中的代码测试即可。