# kafka消息隊列詳解與實戰
#### 1.kafka簡介
> **Kafka**是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像**Hadoop**一樣的日志數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過集群來提供實時的消息。

#### 2.kafaka的安裝
官網下載地址:
```java
http://kafka.apache.org/downloads
```
注意前面是Scala的版本,后面才是kafka的版本,我們下載紅框中的tgz文件

這里我的下載版本為: kafka_2.11-2.2.1,解壓后我們在kafka的主目錄下面啟動kafka:
```java
/opt/kafka/kafka_2.11-2.2.1
```
##### A: 使用kafka自帶的zookeeper來啟動kafka:
```java
直接啟動命令:
//1.啟動zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
//2.查看端口是否被監聽
lsof -i:2181
//3.啟動kafka
bin/kafka-server-start.sh config/server.properties
//4.建一個topic 名稱test1
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 3 --replication-factor 1
//5.查看topic 名稱test1
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test1
//6.用一個consumer訂閱test1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1
//6.用一個producer發布消息到test1
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
```
##### B: 使用單獨安裝的zookeeper來啟動kafka:
下載地址,這里選用的是3.4.14的版本zookeeper:
```java
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/
```
使用zookeeper_3.4.14:
```java
//1.清除臨時數據
rm -rf /tmp/
//2.解壓到/opt/zookeeper-3.4.14
tar -xvf zookeeper-3.4.14.tar.gz
//3.它所在主目錄下使用zookeeper
bin/zkServer.sh start conf/zoo_sample.cfg
//4.檢查啟動狀態
bin/zkServer.sh status conf/zoo_sample.cfg
lsof -i:2181
//5.啟動kafka
bin/kafka-server-start.sh config/server.properties
//6.建一個topic 名稱test1
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 3 --replication-factor 1
//7.查看topic 名稱test1
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test1
//8.用一個consumer訂閱test1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1
//9.用一個producer發布消息到test1
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
```