天天看點

Apache Kafka開發入門指南之2

Apache Kafka開發入門指南之2

Apache Kafka目标是統一離線和線上處理,與Flume和Scribe相比較,Kafka在處理活動流資料方面更具優勢。但是從架構的視野來看,Kafka與傳統的消息系統(例如ActiveMQ或RabbitMQ)更相似一些。

注:Scribe是Facebook開源的日志收集系統,在Facebook内部已經得到大量的應用。它能夠從各種日志源上收集日志,存儲到一個中央存儲系統(可以是NFS、分布式檔案系統等),以便于進行集中統計分析處理。它為日志的“分布式收集、統一處理”提供了一個可擴充的、高容錯的方案。當中央存儲系統的網絡或者機器出現故障時,Scribe會将日志轉存到本地或者另一個位置,當中央存儲系統恢複後,Scribe會将轉存的日志重新傳輸給中央存儲系統。Scribe通常與Hadoop結合使用。Scribe用于向HDFS中push日志,而Hadoop通過MapReduce作業進行定期處理。

注:Flume最早是Cloudera提供的高可用、高可靠、分布式的海量日志采集、聚合和傳輸的日志收集系統,目前歸屬于Apache,是Apache基金會下的一個孵化項目。Flume支援在日志系統中定制各類資料的發送方,用于收集資料;同時Flume提供對資料進行簡單處理,并寫到各種資料接受方(可定制)的能力。Flume提供了從Console(控制台)、RPC(Thrift-RPC)、Text(檔案)、Tail(UNIX tail)、Syslog(syslog日志系統,支援TCP和UDP等2種模式),Exec(指令執行)等資料源上收集資料的能力。Flume采用了多Master的方式。為了保證配置資料的一緻性,Flume引入了ZooKeeper,用于儲存配置資料,ZooKeeper本身可保證配置資料的一緻性和高可用。另外,在配置資料發生變化時,ZooKeeper可以通知Flume Master節點。Flume Master間使用Gossip協定同步資料。

不少公司使用了Kafka:

1)LinkedIn

http://www.linkedin.com

LinkedIn公司使用Apache Kafka作為活動資料的流化和營運度量。

2)DataSift

http://www.datasift.com

DataSift公司使用Apache Kafka作為監控事件的收集器以及使用者消費的實時資料流的跟蹤器。

3)Twitter

http://www.twitter.com

Twitter公司使用Apache Kafka作為其Storm平台的一部分。

注:Storm是一個流處理架構。

4)Foursquare

http://www.foursquare.com

Foursquare公司使用Apache Kafka處理線上之間和線上與離線之間的消息傳輸,把Kafka與Foursquare監控和産品系統以及基于Hadoop的離線基礎設施進行內建。

5)Square

http://www.squareup.com

Square公司使用Apache Kafka作為總線,在Square的各個資料中心之間傳輸所有的系統事件,包括:度量、日志、自定義事件等等。在使用者端,它輸出到Splunk、Graphite或Esper實時警告。

二、Apache Kafka安裝

Kafka是Apache的頂級項目之一,目前的最新版本為0.7.2穩定版,0.8版還是Beta版,但已經獲得了很多大型公司的認可。與0.7.2版相比,Kafka 0.8版提供了很多進階特性,如下:

1)在0.8版之前,如果經紀人Broker失效,那麼任何Topic内的未消費分區的資料可能會丢失。而0.8版對分區增加了複制因子,這確定了隻要有一個複制集有效,那麼任何未送出的消息都不會丢失。

2)早先的版本還確定了所有的生産者和消費者都是複制敏感的。預設情況下,生産者的消息發送請求會被阻塞,直到消息送出到所有活動的複制集上才會解除阻塞。但是,生産者還能被配置為送出消息到單個經紀人Broker。

3)與Kafka的生産者一樣,Kafka的消費者的投票模型改為長輪詢模型且會被阻塞,除非已送出的消息是有效的才會解除阻塞。

4)另外,Kafka 0.8版還配備了一套管理工具,比如叢集的受控關機和上司複制選舉工具等。

Apache Kafka 0.7.x版不能被0.8版所替代的主要原因是0.8版不能向後相容。

如果要把現有的基于Kafka 0.7.x版的叢集遷移到基于0.8版的Kafka叢集上,Apache Kafka提供了遷移工具。遷移工具實際上擔當了基于Kafka 0.7.x版的叢集的消費者的角色,并在基于0.8版的Kafka叢集上擔當了生産者重釋出消息的角色。

下面的視圖說明了整個遷移:

Apache Kafka開發入門指南之2