要點:
- 什麼是kafka, 使用場景有哪些
- kafka優缺點
- 如何使用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