1. 程式人生 > >記:一次kafka內外網訪問設定

記:一次kafka內外網訪問設定

前言

公司的網路是隔離的,伺服器網路與工作網路相互隔離,只能通過埠轉發(Port Forwarding)功能中轉到本地埠。
這會造成伺服器的ip無法在本地直接連通。

這裡記錄下相關配置,便於後續查詢。

環境描述

這裡為了展現場景,直接使用docker模擬一個單節點環境。

1. zookeeper 搭建

docker run -d --name zookeeper --publish 22181:2181 --volume /etc/localtime:/etc/localtime zookeeper:3.5

2. kafka 搭建

  • 修改前
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181   --env KAFKA_ADVERTISED_HOST_NAME=172.16.1.146 --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime  wurstmeister/kafka:1.0.0
  • 修改後
docker run -d --network host --name kafka  --env KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:22181   --env KAFKA_ADVERTISED_HOST_NAME=kafkahost --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime  wurstmeister/kafka:1.0.0
  • 其中kafkahost為172.16.1.146主機的hostname。

容器內生成的/opt/kafka/config/server.properties配置部分展現

[[email protected] ~]# docker exec 5650801499fb cat /opt/kafka/config/server.properties

broker.id=-1

listeners=PLAINTEXT://:9092

advertised.listeners=PLAINTEXT://kafkahost:9092

......

著重注意listeners和advertised.listeners。
listeners需要監聽所有來源。
此處配置kafkahost主要是內外網路隔離,無法聯通,通過本地hosts配置進行連線。

3. 本地開發新增hosts(與伺服器隔離的網路,通過埠中轉,將遠端埠中轉到本地)

127.0.0.1 kafkahost

附錄:部分命令

1.監聽埠訊息

主要用來監聽訊息是否到達,排查網路問題

tcpdump -i eth0  -A -s 0 'tcp port 9092 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' |grep -A 10 'PLAYTIMES_SEND'

2.kafka服務啟動

bin/kafka-server-start.sh -daemon ../config/server.properties

3.建立一個主題

## --replication-factor 1   #複製1份
## --partitions  #分割槽
bin/kafka-topics.sh --create --zookeeper localhost:22181 --replication-factor 1 --partitions 10 --topic test

4.檢視主題

## 檢視topic的詳細資訊
bin/kafka-topics.sh --zookeeper 127.0.0.1:22181 --topic test --describe
# 檢視topic列表
bin/kafka-topics.sh --zookeeper 127.0.0.1:22181 --list

5.為topic增加partition

只能增加分割槽,不能減少分割槽,請謹慎新增。

bin/kafka-topics.sh --zookeeper 127.0.0.1:22181 --alter --partitions 20 --topic test

6.建立指定主題的生產者

bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test

7.執行一個消費者

bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning

8.檢視消費情況

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test-consumer-group