一、背景
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的安裝與部署文章中的代碼測試即可。