kafka集群部署和测试

创建一个三个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

 

 

 

 

 

 

posted @ 2020-05-26 16:24  jabbok  阅读(1200)  评论(0编辑  收藏  举报