1. 程式人生 > 其它 >[區間DP] 例題

[區間DP] 例題

上一篇,我們搭建了 kafka 單節點 回顧,現在我們要搭建叢集。

在開始之前,先把單節點那套用 docker-compose -f docker-compose-single-broker.yml down 清理掉

1.定義 docker-compose.yml

KAFKA_ADVERTISED_HOST_NAME 不建議使用了,因為它對應 server.properties 中的 advertised.host.name,而這個屬性已經是 DEPRECATED

參考自 http://kafka.apache.org/0100/documentation.html#brokerconfigs

作為替代可以使用 KAFKA_ADVERTISED_LISTENERS,該環境變數對應 server.properties 中的 advertised.listeners.

相信你們和我有一樣的疑惑, 戳-> kafka listeners 和 advertised.listeners 的區別及應用

version: '3.8'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka1:
    image: wurstmeister/kafka
    depends_on: [ zookeeper ]
    ports:
      - "9091:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://10.24.99.195:9091
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9091
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  kafka2:
    image: wurstmeister/kafka
    depends_on: [ zookeeper ]
    ports:
      - "9090:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://10.24.99.195:9090
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9090
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181      
  kafka3:
    image: wurstmeister/kafka
    depends_on: [ zookeeper ]
    ports:
      - "9093:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://10.24.99.195:9093
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

環境變數 KAFKA_LISTENERS 的 INSIDE 和 OUTSIDE 的埠必須不同。

接著,cd進入docker-compose.yml所在的工作目錄,執行命令 docker-compose up -d,此時預設就是使用該檔案。

2.容器內驗證

進入容器的方法,就不囉嗦了,不瞭解的可以百度。(docker psdocker exec -it CONTAINER_ID bash

1、建立一個主題 mytopic

kafka-topics.sh --create --topic mytopic --partitions 2 --zookeeper kafka_zookeeper_1:2181 --replication-factor 2

2、開啟一個視窗,進入容器作生產者:

kafka-console-producer.sh --topic=mytopic --broker-list kafka_kafka1_1:9092,kafka_kafka2_1:9092,kafka_kafka3_1:9092

3、再開啟一個視窗,進入容器作消費者:

kafka-console-consumer.sh --bootstrap-server kafka_kafka1_1:9092,kafka_kafka2_1:9092,kafka_kafka3_1:9092 --from-beginning --topic mytopic

在kafka叢集內部,我們使用的叢集字串都是 kafka_kafka1_1:9092,kafka_kafka2_1:9092,kafka_kafka3_1:9092

參考文件

  • Kafka Document -- Broker Config官方文件

  • docker快速搭建kafka叢集 閱讀

  • docker啟動容器出現問題 進行日誌檢視 閱讀
    docker logs 命令可以幫助尋找容器Exited的異常原因

  • 如果你不會用 kafka-docker,看這裡 閱讀
    這篇文章結尾的答疑,畫的kafka網路拓撲還不錯。

  • kafka listeners 和 advertised.listeners 的區別及應用 閱讀

  • 用 Docker 快速搭建 Kafka 叢集 閱讀
    這篇中,也和我的想法一樣,提到了使用 SpringBoot 應用