Kafka 01——Kafka的安裝及簡單入門使用
- 1. 下載安裝
- 1.1 JDK的安裝
- 1.2 Zookeeper的安裝
- 1.2.1 關于Zookeeper版本的選擇
- 1.2.2 下載、安裝Zookeeper
- 1.3 kafka的安裝
- 1.3.1 下載
- 1.3.2 解壓
- 1.3.3 修改配置文件
- 2. 啟動 kafka
- 2.1 Kafka啟動
- 2.2 啟動 kafka 遇到的問題
- 2.2.1 問題1
- 2.2.2 問題2
- 3. 簡單實用
- 3.1 創建topic
- 3.2 查看已創建的topic
- 3.3 發送消息
- 3.3.1 發送消息命令
- 3.3.2 遇到的問題
- 3.3.2.1 問題1
- 3.3.2.2 問題2
- 3.4 接收消息
- 3.4.1 接收消息演示
- 3.4.2 接收消息的相關知識小點
- 3.5 查看zk
- 4. 總結
- 4.1 Kafka 基本概念
- 4.2 常見命令
- 4.2.1 常用的基礎命令
- 4.2.2 簡單實用命令
- 4.3 數據日志
- 4.4 結構圖
1. 下載安裝
1.1 JDK的安裝
- 因為kafka本身的開發語言是
Scala
,而Scala
是基于 jdk 開發的,所以要先安裝jdk,關于 jdk 的安裝,可以看下面的兩篇文章,如下:- Linux安裝JDK1.8.
- linux下普通用戶(非root用戶)安裝JDK8.
1.2 Zookeeper的安裝
1.2.1 關于Zookeeper版本的選擇
- 可以根據下面下載的 kafaka 的版本選擇對應的Zookeeper版本,怎么選擇,如下:
- 方式1:直接看Kafka里libs下的jar包,如下:
- 方式2:也可以通過查看源碼,看版本信息,如下:
- 方式1:直接看Kafka里libs下的jar包,如下:
1.2.2 下載、安裝Zookeeper
- 去官網,根據需要下載對應的版本,如下:
- 關于 Zookeeper 的安裝,可以看下面的文章
zookeeper安裝與使用(win+linux).
1.3 kafka的安裝
1.3.1 下載
- 去官網下載需要的版本,官網地址:
https://kafka.apache.org/downloads.
1.3.2 解壓
- 然后解壓,如下:
tar -zxvf kafka_2.12-2.8.2.tgz
1.3.3 修改配置文件
-
修改配置文件
server.properties
,如下:
-
配置信息如下:
# The id of the broker. This must be set to a unique integer for each broker. broker.id=0listeners=PLAINTEXT://內網IP:9092 advertised.listeners=PLAINTEXT://公網IP:9092zookeeper.connect=zk的公網IP:2181# …… 其他配置,先默認即可
2. 啟動 kafka
2.1 Kafka啟動
-
啟動命令如下:
./kafka-server-start.sh ../config/server.properties &
-
啟動成功之后,顯示:
-
查看進程:
ps -ef | grep kafka
2.2 啟動 kafka 遇到的問題
2.2.1 問題1
- 問題描述,如下:
org.apache.kafka.common.KafkaException: Socket server failed to bind to XXX:9092: Cannot assign requested address.
- 問題原因
- 服務器的公網IP(對外暴露的ip)和真實ip(ifconfig顯示的ip)可能只是映射關系,用戶訪問對外ip時,OpenStack會轉發到對應的真實ip實現訪問。
- 但此時如果配置文件中
server.properties
配置中的是listeners=PLAINTEXT://公網IP:9092
的時候無法啟動,因為socket無法綁定監聽,就會報上面的錯誤。 - 解決方法也很簡單,將上面的配置,改成
listeners=PLAINTEXT://內網IP:9092
即可,其他使用時正常使用公網ip即可,跟真實的內網ip就沒有關系了。
- 解決問題
-
先查看內網IP
ifconfig
-
再修改配置文件
server.properties
,如下:listeners=PLAINTEXT://內網IP:9092 advertised.listeners=PLAINTEXT://公網IP:9092
-
- 然后重新啟動即可。
2.2.2 問題2
3. 簡單實用
3.1 創建topic
- 如下:
./kafka-topics.sh --create --zookeeper zookeeper服務的IP:2181 --replication-factor 1 --partitions 1 --topic susu-topic
3.2 查看已創建的topic
- 如下:
./kafka-topics.sh -list --zookeeper zookeeper服務的IP:2181
3.3 發送消息
3.3.1 發送消息命令
- 如下:
./kafka-console-producer.sh --broker-list 內網IP:9092 --topic susu-topic或者./kafka-console-producer.sh --broker-list 公網IP:9092 --topic susu-topic
3.3.2 遇到的問題
3.3.2.1 問題1
- 問題描述如下:
[2023-08-10 09:01:57,758] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:15,979] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:49,538] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:02:50,562] ERROR Error when sending message to topic susu-topic with key: null, value: 4 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)org.apache.kafka.common.errors.TimeoutException: Topic susu-topic not present in metadata after 60000 ms.>[2023-08-10 09:03:18,069] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient) [2023-08-10 09:03:47,001] WARN [Producer clientId=console-producer] Bootstrap broker 43.143.190.116:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
- 解決問題:
這里我的處理是開放 9092 端口,關于開放端口和防火墻問題,可以看下面的文章:
linux下查看防火墻狀態、關閉防火墻、開放關閉端口等.
3.3.2.2 問題2
- 開放端口之后的問題,如下,問題描述:
WARN [Producer clientId=console-producer] Connection to node -1 (/XXX:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
- 解決問題:
這里就是重啟服務,重啟kafka,問題就解決了,不知道啥問題,總之,重啟能解決百分之九十九的問題!!!
3.4 接收消息
3.4.1 接收消息演示
- 如下:
./kafka-console-consumer.sh --bootstrap-server 外網IP或內網IP:9092 --topic susu-topic --from-beginning
3.4.2 接收消息的相關知識小點
- 如下:
- 消費方式1: 從頭開始消費
./kafka-console-consumer.sh --bootstrap-server IP:9092 --topic susu-topic --from-beginning
- 消費方式2: 從最后一條消息的偏移量+1開始消費
./kafka-console-consumer.sh --bootstrap-server IP:9092 --topic susu-topic
- 消費方式1: 從頭開始消費
- 具體如下:
3.5 查看zk
- 如下:
4. 總結
4.1 Kafka 基本概念
- Kafka 是一種消息隊列,主要用來處理大量數據狀態下的消息隊列,一般用來做日志的處理。既然是消息隊列,那么 Kafka 也就擁有消息隊列的相應的特性了。
- Kafka 像其他MQ一樣,也有自己的基礎架構,主要存在生產者 Producer、Kafka 集群 Broker、消費者Consumer、注冊消息Zookeeper.
- Topic:主題,一個虛擬的概念,由1到多個 Partitions 組成,可以理解為一個隊列,生產者和消費者都是面向一個Topic。
- Partition:分區,實際消息存儲單位。為了實現擴展性,一個非常大的Topic可以分布到多個Broker上,一個Topic可以分為多個 Partition,每個 Partition 是一個有序的隊列(分區有序,不能保證全局有序)。
- Producer:消息生產者,向 Kafka 中發布消息的角色。
- Consumer:消息消費者,從 Kafka 中拉取消息消費的客戶端。
- Broker:經紀人,一臺 Kafka 服務器就是一個 Broker,一個集群由多個 Broker 組成,一個 Broker 可以容納多個 Topic。
4.2 常見命令
4.2.1 常用的基礎命令
- 啟動命令:
./kafka-server-start.sh ../config/server.properties &
- 停止命令:
./kafka-server-stop.sh
- 地點
4.2.2 簡單實用命令
- 創建topic
# 創建topic ./kafka-topics.sh --create --zookeeper zookeeper的IP:2181 --replication-factor 1 --partitions 1 --topic susu-topic
- 查看已經創建的topic信息
# 查看已經創建的topic信息 ./kafka-topics.sh -list --zookeeper zookeeper的IP:2181
- 發送消息
./kafka-console-producer.sh --broker-list 內網IP:9092 --topic susu-topic或者./kafka-console-producer.sh --broker-list 公網IP:9092 --topic susu-topic
- 接收消息
./kafka-console-consumer.sh --bootstrap-server 外網IP或內網IP:9092 --topic susu-topic --from-beginning
4.3 數據日志
- 查看數據日志,存放路徑,看配置文件里配的哪個路徑
log.dirs
,如下:
4.4 結構圖
- 如下: