Kafka
- 開啟zookeeper:
bin/zookeeper-server-start.sh
config/zookeeper.properties - 開啟server:
bin/kafka-server-start.sh
config/server.properties - 查看Topic:
bin/kafka-topics.sh --list --zookeeper localhost:2181 - 創(chuàng)建一個Topic: b
in/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic AnalyticsData - 向Kafka輸入數(shù)據(jù):
- 開啟Consumer:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic AnalyticsData --from-beginning
原理
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng):
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數(shù)十萬的消息。
支持通過kafka服務(wù)器和消費機(jī)集群來分區(qū)消息。
支持Hadoop并行數(shù)據(jù)加載。
kafka本身有內(nèi)置zookeeper。
一個典型的Kafka集群中包含若干Producer(可以是web前端產(chǎn)生的PageView,或者是服務(wù)器日志,系統(tǒng)CPU、Memory等),若干broker(Kafka支持水平擴(kuò)展,一般broker數(shù)量越多,集群吞吐率越高),若干Consumer Group,以及一個Zookeeper集群。Kafka通過Zookeeper管理集群配置,選舉leader,以及在Consumer Group發(fā)生變化時進(jìn)行rebalance。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費消息。
因此Kafka提供兩種策略刪除舊數(shù)據(jù)。一是基于時間,二是基于Partition文件大小。
例如可以通過配置$KAFKA_HOME/config/server.properties,讓Kafka刪除一周前的數(shù)據(jù),也可在Partition文件超過1GB時刪除舊數(shù)據(jù)。
Kafka的設(shè)計理念之一就是同時提供離線處理和實時處理。根據(jù)這一特性,可以使用Storm這種實時流處理系統(tǒng)對消息進(jìn)行實時在線處理,同時使用Hadoop這種批處理系統(tǒng)進(jìn)行離線處理,還可以同時將數(shù)據(jù)實時備份到另一個數(shù)據(jù)中心,只需要保證這三個操作所使用的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提供的一個分布式、可靠、高可用的海量日志采集、聚合、傳輸?shù)娜罩臼占到y(tǒng),支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù)。Flume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接收方。Flume提供了從console(控制臺)、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(控制臺)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系統(tǒng))等。在我們系統(tǒng)中由kafka來接收。