Kafka 簡介
作為一個消息中間件,Kafka 以高擴充性、高吞吐量等特點,在網際網路項目中被廣泛采用。
Kafka 中文文檔:https://kafka.apachecn.org/
kafka 安裝包:http://kafka.apache.org/downloads
部署 Kafka
使用 Docker 快速部署一個簡單的 Kafka 服務
1.下載下傳 kafka 的 docker 鏡像:
docker pull spotify/kafka
注意: kafka 依賴 zookeeper 服務,而 spotify/kafka 裡面內建好了 zookeeper 與 kafka,實作了一鍵啟動。
檢視docker鏡像:docker images
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spotify/kafka latest a9e0a5b8b15e 4 years ago 443MB
2.在 docker 中啟動 kafka 服務:
docker run -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=127.0.0.1 --env ADVERTISED_PORT=9092 spotify/kafka
注意:127.0.0.1 是linux 系統的IP
檢視docker容器:docker ps -a
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f06c576bb562 spotify/kafka "supervisord -n" 4 hours ago Up 18 minutes 0.0.0.0:2181->2181/tcp, 0.0.0.0:9092->9092/tcp kafka
3.檢視kafka啟動日志:
docker logs -f --tail 200 kafka
若出現如下資訊,即啟動成功!
若出現如下資訊:
出現kafka entered FATAL state, too many start retries too quickly這個錯誤是因為:
kafka啟動參數的記憶體配置太大了。這裡我之前設定的是1G,太大了,更改小一點即可。
進入到kafka容器内,找到kafka-server-start.sh檔案的所在目錄下,執行指令如下:vim kafka-server-start.sh
我們在建立基礎容器之後,進入容器,進行編輯配置檔案的時候,需要使用vim或者vi指令,但是會出現:
[email protected]:/opt/kafka_2.11-0.10.1.0/bin# vim kafka-server-start.sh
bash: vim: command not found
這是因為vim沒有安裝。使用如下指令安裝:
apt-get update
apt-get install vim
vim kafka-server-start.sh
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx256M -Xms256M"
fi
修改配置後,重新開機kafka,docker restart kafka
4.執行 kafka 的生産端、消費端程式,檢視運作效果:
#視窗1 生産端
生産端發消息,進入到kafka容器内,找到kafka-console-producer.sh 檔案的所在目錄下,指令行示範如下:
./kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test3
[email protected]:~# docker exec -it kafka /bin/bash
[email protected]:/# cd /opt/kafka_2.11-0.10.1.0/bin/
[email protected]:/opt/kafka_2.11-0.10.1.0/bin# ls
connect-distributed.sh kafka-console-consumer.sh kafka-mirror-maker.sh kafka-replica-verification.sh kafka-streams-application-reset.sh zookeeper-security-migration.sh
connect-standalone.sh kafka-console-producer.sh kafka-preferred-replica-election.sh kafka-run-class.sh kafka-topics.sh zookeeper-server-start.sh
hs_err_pid3002.log kafka-consumer-groups.sh kafka-producer-perf-test.sh kafka-server-start.sh kafka-verifiable-consumer.sh zookeeper-server-stop.sh
kafka-acls.sh kafka-consumer-offset-checker.sh kafka-reassign-partitions.sh kafka-server-stop.sh kafka-verifiable-producer.sh zookeeper-shell.sh
kafka-configs.sh kafka-consumer-perf-test.sh kafka-replay-log-producer.sh kafka-simple-consumer-shell.sh windows
[email protected]:/opt/kafka_2.11-0.10.1.0/bin# ./kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test3
{"key":"鍵","value":"值","name":"測試kafka","describe":"發送kafka消息"}
#視窗2 消費端
消息端收消息,進入到kafka容器内,找到kafka-console-consumer.sh 檔案的所在目錄下,指令行示範如下:
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test3 --from-beginning
[email protected]:~# docker exec -it kafka /bin/bash
[email protected]:/# cd /opt/kafka_2.11-0.10.1.0/bin/
[email protected]:/opt/kafka_2.11-0.10.1.0/bin# ls
connect-distributed.sh kafka-console-consumer.sh kafka-mirror-maker.sh kafka-replica-verification.sh kafka-streams-application-reset.sh zookeeper-security-migration.sh
connect-standalone.sh kafka-console-producer.sh kafka-preferred-replica-election.sh kafka-run-class.sh kafka-topics.sh zookeeper-server-start.sh
hs_err_pid3002.log kafka-consumer-groups.sh kafka-producer-perf-test.sh kafka-server-start.sh kafka-verifiable-consumer.sh zookeeper-server-stop.sh
kafka-acls.sh kafka-consumer-offset-checker.sh kafka-reassign-partitions.sh kafka-server-stop.sh kafka-verifiable-producer.sh zookeeper-shell.sh
kafka-configs.sh kafka-consumer-perf-test.sh kafka-replay-log-producer.sh kafka-simple-consumer-shell.sh windows
[email protected]:/opt/kafka_2.11-0.10.1.0/bin# ./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test3 --from-beginning
{"key":"鍵","value":"值","name":"測試kafka","describe":"發送kafka消息"}