Kafka
- 開(kāi)啟zookeeper:
bin/zookeeper-server-start.sh
config/zookeeper.properties - 開(kāi)啟server:
bin/kafka-server-start.sh
config/server.properties - 查看Topic:
bin/kafka-topics.sh --list --zookeeper localhost:2181 - 創(chuàng)建一個(gè)Topic: b
in/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic AnalyticsData - 向Kafka輸入數(shù)據(jù):
- 開(kāi)啟Consumer:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic AnalyticsData --from-beginning
原理
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng):
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數(shù)十萬(wàn)的消息押桃。
支持通過(guò)kafka服務(wù)器和消費(fèi)機(jī)集群來(lái)分區(qū)消息凿菩。
支持Hadoop并行數(shù)據(jù)加載。
kafka本身有內(nèi)置zookeeper庸追。
一個(gè)典型的Kafka集群中包含若干Producer(可以是web前端產(chǎn)生的PageView湿痢,或者是服務(wù)器日志涝缝,系統(tǒng)CPU扑庞、Memory等),若干broker(Kafka支持水平擴(kuò)展拒逮,一般broker數(shù)量越多罐氨,集群吞吐率越高),若干Consumer Group滩援,以及一個(gè)Zookeeper集群栅隐。Kafka通過(guò)Zookeeper管理集群配置,選舉leader玩徊,以及在Consumer Group發(fā)生變化時(shí)進(jìn)行rebalance租悄。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費(fèi)消息恩袱。
因此Kafka提供兩種策略刪除舊數(shù)據(jù)泣棋。一是基于時(shí)間,二是基于Partition文件大小畔塔。
例如可以通過(guò)配置$KAFKA_HOME/config/server.properties潭辈,讓Kafka刪除一周前的數(shù)據(jù),也可在Partition文件超過(guò)1GB時(shí)刪除舊數(shù)據(jù)俩檬。
Kafka的設(shè)計(jì)理念之一就是同時(shí)提供離線處理和實(shí)時(shí)處理萎胰。根據(jù)這一特性碾盟,可以使用Storm這種實(shí)時(shí)流處理系統(tǒng)對(duì)消息進(jìn)行實(shí)時(shí)在線處理棚辽,同時(shí)使用Hadoop這種批處理系統(tǒng)進(jìn)行離線處理,還可以同時(shí)將數(shù)據(jù)實(shí)時(shí)備份到另一個(gè)數(shù)據(jù)中心冰肴,只需要保證這三個(gè)操作所使用的Consumer屬于不同的Consumer Group即可屈藐。
def createProducer[K, V](bootstrapServers: String, keySerializer: String = KAFKA_SERIALIZATION_STRINGSERIALIZER, valueSerializer: String = KAFKA_SERIALIZATION_STRINGSERIALIZER) =
{
val properties = new Properties()
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, keySerializer)
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, valueSerializer)
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092") new KafkaProducer[K, V](properties)
}
Flume
Flume是Cloudera提供的一個(gè)分布式、可靠熙尉、高可用的海量日志采集联逻、聚合、傳輸?shù)娜罩臼占到y(tǒng)检痰,支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方包归,用于收集數(shù)據(jù)。Flume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理铅歼,并寫(xiě)到各種數(shù)據(jù)接收方公壤。Flume提供了從console(控制臺(tái))、RPC(Thrift-RPC)椎椰、text(文件)厦幅、tail(UNIX tail)、syslog(syslog日志系統(tǒng)慨飘,支持TCP和UDP等2種模式)确憨,exec(命令執(zhí)行)等數(shù)據(jù)源上收集數(shù)據(jù)的能力,在我們的系統(tǒng)中目前使用exec方式進(jìn)行日志采集。Flume的數(shù)據(jù)接受方,可以是console(控制臺(tái))休弃、text(文件)吞歼、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系統(tǒng))等塔猾。在我們系統(tǒng)中由kafka來(lái)接收浆熔。