hadoop系列: 分佈式日誌分析工具kafka

要點:

  1. 什麼是kafka, 使用場景有哪些
  2. kafka優缺點
  3. 如何使用kafka( shell接口,  java api )

point1:   簡介

1, Kafka是一個分佈式發佈-訂閱消息系統

最初由LinkedIn公司開發,之後成爲Apache項目的一部分 (Kafka是高吞吐量的,可分區的,冗餘備份的,可插拔式擴展的,持久性的日誌服務,主要用於處理活躍的流式數據)

( kafka 採用linux Zero-Copy提高發送性能, 實現高吞吐量)

2,  什麼是發佈-訂閱消息系統?

Java消息服務JMS( java Message Service),是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。 JMS規範目前支持兩種消息模型:點對點(point to point, queue)和發佈/訂閱(publish/subscribe,topic),這兩種模式主要區別就是發送到隊列的消息能否重複消費(多次訂閱)

點對點: 生產者生產消息,發送到queue中,然後消息消費者從queue中取出並且消費消息。消息被消費以後,queue中不再有存儲,所以消費者不能消費已經被消費完的消息( queue 支持多個消費者,但是對一個消息而言,只會有一個消費者可以消費 )

發佈/訂閱:生產者生產消息,發佈到topic中,同時有多個消息消費者(訂閱)消費該消息(發佈到topic的消息會被所有訂閱者消費 )

3,  Kafka client 消息接收的三種模式( 對JMS的消息傳輸擔保的實現)

at most once: 最多一次              

                     ----->props.put("enable.auto.commit", "true"), client不調用commitSync()

at least once: 消息至少發送一次

                     ----->props.put("enable.auto.commit", "false"), consumer.commitAsync()

exactly once: 消息只會發送一次

                    ----->props.put("enable.auto.commit", "false"),catch異常時:consumer.seek(topicPartition,record.offset())

point2:優缺點

特點1:kafka 只能能保證一個Partition內, 消息的有序性(默認爲異步發送消息, 若topic有多個partition, 在一個消費者組內若只有一個consumer就不能保證消息的有序性了==>此時,要實現消息有序,只能改變topic的分區數爲1即可)

特點2: 實時性, 消息被生成者線程生產就能馬上被消費者線程消費

特點3: 提供分區數據的複製和備份,確保至少有一份數據是可用的,不會丟失數據

特點4: 結合zookeeper使用,在Controller出現異常的情況之下,會從Broker裏面自動地選擇一個Broker成爲新的Controller,而Controller的主要職責是管理整個集羣的分區和副本的狀態,所以當出現“腦裂”就會造成數據混亂的問題

point3:使用場景

1,網站活動跟蹤場景: 按照用戶的行爲(註冊、登錄、購買)等進行切分爲不同的topic, 進行數據分析

2,構建日誌分析平臺: 結合flume使用, 採集日誌的時候業務是無感知無侵入的,數據可以sink到hive、hbase的hadoop組件

3,數據的多路轉發:   充當flume的channel角色,多個channel可以實現多個sink路徑

point4: kafka api的使用(shell, java)

1, shell接口: 安裝kafka---->  tar -xzvf kafka_2.9.2-0.8.1.1.tgz  ;  cd kafka_2.9.2-0.8.1.1

單機版kafka:

啓動zk, kafka:        bin/zookeeper-server-start.sh config/zookeeper.properties &;  bin/kafka-server-start.sh config/server.properties

創建topic :   bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic t1

( 查看topic :  bin/kafka-topics.sh --list --zookeeper localhost:2181)

啓動生產者:  bin/kafka-console-producer.sh --broker-list localhost:9092 --topic t1 (阻塞時,可以輸入消息)

啓動消費者: bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic t1 --from-beginning

集羣版kafka:   配置config/server.properties

kafka1機器:  broker.id=101
             zookeeper.connect=zk1:2181,zk2:2181

kafka2機器:  broker.id=102
             zookeeper.connect=zk1:2181,zk2:2181

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章