創建一個三個broker的集群
修改副本默認值,KAFKA_DEFAULT_REPLICATION_FACTOR=3,默認是1,沒有副本。設置為和broker數量一樣
docker run -d --name kafka01 -p 9092:9092 -p 9999:9999 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.18.5:2181 -e KAFKA_ADVERTISED_HOST_NAME=192.168.18.5 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.18.5:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e JMX_PORT=9999 -e KAFKA_DEFAULT_REPLICATION_FACTOR=3 -e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.18.5 -Dcom.sun.management.jmxremote.rmi.port=9999" wurstmeister/kafka:0.11.0.0 docker run -d --name kafka02 -p 9092:9092 -p 9999:9999 -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=192.168.18.5:2181 -e KAFKA_ADVERTISED_HOST_NAME=192.168.18.249 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.18.249:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e JMX_PORT=9999 -e KAFKA_DEFAULT_REPLICATION_FACTOR=3 -e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.18.249 -Dcom.sun.management.jmxremote.rmi.port=9999" wurstmeister/kafka:0.11.0.0 docker run -d --name kafka02 -p 9092:9092 -p 9999:9999 -e KAFKA_BROKER_ID=3 -e KAFKA_ZOOKEEPER_CONNECT=192.168.18.5:2181 -e KAFKA_ADVERTISED_HOST_NAME=192.168.21.166 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.21.166:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e JMX_PORT=9999 -e KAFKA_DEFAULT_REPLICATION_FACTOR=3 -e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.21.166 -Dcom.sun.management.jmxremote.rmi.port=9999" wurstmeister/kafka:0.11.0.0
概念理解
復制系數 replication.factor
topic的復制系數=3,就是每個分區會被3個不同的broker復制3次。數據容量就是3倍,可以容忍2個broker宕機或進入維護狀態。官方推薦至少3個brokers。
分區副本的leader和follower
分區副本中,有一個副本會被選舉為leader,leader負責處理producer 和 consume的請求,而副本機器只負責sync leader收到的消息。
leader所在broker宕機,則有一個follower會被選舉為leader。
創建帶副本的topic
手動創建一個topic,復制系數設為3,分區為2,就是每個broker上一個副本。
查看可見,副本=3,brokers總數=3,brokers for topic = 3,就是每個broker上一個副本。
這個topic是2分區,可見,每個broker上都有2分區。
分區信息,可見,分區0的leader副本在broker1上,分區1的副本在broker3上。
故障測試:broker掛掉
現在殺掉broker1,可見,分區0的leader副本到了broker2上,在同步中的副本信息中,沒有了broker1。
同時生產和消費正常。
重啟broker1,broker1又回來了。
查看broker的信息,broker1上擁有大量的數據rw