kafka单机实验:
环境准备:
1、下载kafka,zookeeper,并解压
wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3.0.tgz wget https://apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz tar zxvf kafka_2.11-2.3.0.tgz tar zxvf apache-zookeeper-3.5.5-bin.tar.gz
2、配置zookeeper
# 进入zookeeper的conf目录 # 拷贝一份zoo.cfg数据 cp zoo_sample.cfg zoo.cfg # 编辑zoo.cfg数据 vim zoo.cfg # 编辑内容,几个节点,添加几条(server.ZKID=ZKIP:2888:3888),用于zk之间的通信 server.1=127.0.0.1:2888:3888 # zoo.cfg中有个dataDir配置(数据存储的目录),默认为/tmp/zookeeper # 新建目录/tmp/zookeeper mkdir /tmp/zookeeper # 新建文件 vim /tmp/zookeeper/myid # 编辑内容,一个数字(ZKID),对应zoo.cfg的配置 1 # 进入zookeeper的bin目录 # 启动zk,并查看zk状态是否正常 ./zkServer.sh start ./zkServer.sh status
3、配置kafka
# 进入kafka的config目录 # 备份并编辑server.properties cp server.properties server.properties.bak vim server.properties # 编辑内容,broker.id改为大于0的,不同机器设置的不一样 broker.id=1 # 其它配置,有需要自行修改 # 例如zookeeper不在本机,可以通过设置zookeeper.connect # 进入kafka的bin目录 # 启动kafka ./kafka-server-start.sh ../config/server.properties
开始实验:
1、一个副本一个分区
# 命令:创建一个主题(topic为test,分区为1) ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 0 --partitions 1 --topic test # 结果: Created topic test. # 命令:查看所有主题 ./kafka-topics.sh --list --zookeeper localhost:2181 # 结果: test # 命令:启动一个生产者 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test # 命令:另起一个ssh连接服务器,启动一个消费者 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning # 结果: 在生产者输入消息,在消费者会收到消息
2、一个副本多个分区
# 命令:创建一个主题(topic为test2,分区为3) ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic test2 # 结果: Created topic test2. # 命令:查询这个主题(test2)的详细信息 ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test2 # 结果: # topic为test2,分区数为3,副本集数量为1(单机,只有主副本) # Partition:不同分区(0、1、2) # Leader:主副本的节点(负责读写的节点) # Replicas:分区的复制节点列表(单机,只有主副本) # Isr:同步状态的复制节点列表(Replicas的子集,存活且赶上主副本的) Topic:test2 PartitionCount:3 ReplicationFactor:1 Configs: Topic: test2 Partition: 0 Leader: 1 Replicas: 1 Isr: 1 Topic: test2 Partition: 1 Leader: 1 Replicas: 1 Isr: 1 Topic: test2 Partition: 2 Leader: 1 Replicas: 1 Isr: 1 # 命令:启动一个生产者,发几条消息 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test2 msg1 msg2 msg3 msg4 msg5 msg6 # 命令:查看分区0的log日志,消息负载均衡到各个分区 strings /tmp/kafka-logs/test2-0/00000000000000000000.log # 结果: msg2 msg5 # 命令:查看分区1的log日志,消息负载均衡到各个分区 strings /tmp/kafka-logs/test2-1/00000000000000000000.log # 结果: msg1 msg4 # 命令:查看分区2的log日志,消息负载均衡到各个分区 strings /tmp/kafka-logs/test2-2/00000000000000000000.log # 结果: msg3 msg6
kafka集群实验:
环境准备:
1、原先机器 其它配置不变,修改kafka配置
# 进入kafka的config目录 # 编辑server.properties,将listeners设置上内网IP(通过ifconfig查看) listeners=PLAINTEXT://192.168.0.83:9092 # 注意,kafka集群云主机的,客户端自己电脑上,想要生产数据或者消费数据,需要通过外网访问kafka集群 # 因此需要再配置advertised.listeners,配置的地址为外网IP advertised.listeners=PLAINTEXT://1.6.2.8:9092 # 启动kafka ./kafka-server-start.sh ../config/server.properties
2、第二台机器 配置kafka
# 下载kafka wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3.0.tgz # 解压kafka tar zxvf kafka_2.11-2.3.0.tgz # 进入kafka的config目录 # 备份并编辑server.properties cp server.properties server.properties.bak vim server.properties # 编辑内容,broker.id改为大于0的,不同机器设置的不一样 broker.id=2 # 编辑server.properties,将listeners设置上内网IP(通过ifconfig查看) listeners=PLAINTEXT://192.168.0.5:9092 # 注意,kafka集群云主机的,客户端自己电脑上,想要生产数据或者消费数据,需要通过外网访问kafka集群 # 因此需要再配置advertised.listeners,配置的地址为外网IP advertised.listeners=PLAINTEXT://1.6.2.4:9092 # 编辑内容,配置zk集群的地址(就第一台机器) zookeeper.connect=192.168.0.83:2181 # 进入kafka的bin目录 # 启动kafka ./kafka-server-start.sh ../config/server.properties
开始实验:
1、各个分区在两个机器的负载均衡 以及 kafka集群的高可用
# 在第一台机器操作 # 进入kafka的bin目录 # 命令:创建一个主题(topic为test4,分区为3,副本集为2) ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic test4 # 结果: Created topic test4. # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test4 # 结果:每个分区的主副本负载均衡到两台机器 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2 Topic: test4 Partition: 1 Leader: 2 Replicas: 2,1 Isr: 2,1 Topic: test4 Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1,2 # 挂掉第二台机器的kafka # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test4 # 结果:分区的主副本会转移到第一台机器,Replicas不变,Isr只会有1,表示存活的只有1 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1 Topic: test4 Partition: 1 Leader: 1 Replicas: 2,1 Isr: 1 Topic: test4 Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1 # 命令:启动消费者输几条数据 ./kafka-console-producer.sh --broker-list 116.196.92.98:9092 --topic test4 msg1 msg2 msg3 msg4 msg5 msg6 # 恢复第二台机器的kafka # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test4 # 结果:主副本没变化,没再负载均衡到第二台机器,但是ISR的列表都加了2,表示第二台机器已存活并追上第一台机器 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2 Topic: test4 Partition: 1 Leader: 1 Replicas: 2,1 Isr: 1,2 Topic: test4 Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1,2 # 命令:查看下各个分区的日志,数据都已从第一台机器同步过来 strings /tmp/kafka-logs/test4-1/00000000000000000000.log msg2 msg5 # 挂掉第一台机器的kafka # 在第二台机器操作 # 进入kafka的bin目录 # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper 192.168.0.83:2181 --topic test4 # 结果:分区的主副本会转移到第二台机器,Replicas不变,Isr只会有2,表示存活的只有2 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 2 Replicas: 1,2 Isr: 2 Topic: test4 Partition: 1 Leader: 2 Replicas: 2,1 Isr: 2 Topic: test4 Partition: 2 Leader: 2 Replicas: 1,2 Isr: 2 # 恢复第一台机器的kafka # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper 192.168.0.83:2181 --topic test4 # 结果:主副本没变化,没再负载均衡到第一台机器,但是ISR的列表都加了1,表示第一台机器已存活并追上第二台机器 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 2 Replicas: 1,2 Isr: 2,1 Topic: test4 Partition: 1 Leader: 2 Replicas: 2,1 Isr: 2,1 Topic: test4 Partition: 2 Leader: 2 Replicas: 1,2 Isr: 2,1 # 命令:负载均衡各个分区的主副本 ./kafka-preferred-replica-election.sh --zookeeper 192.168.0.83:2181 # 命令:查看topic(test4)的详细信息 ./kafka-topics.sh --describe --zookeeper 192.168.0.83:2181 --topic test4 # 结果:各个分区的主副本进行负载均衡到两个机器 Topic:test4 PartitionCount:3 ReplicationFactor:2 Configs: Topic: test4 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 2,1 Topic: test4 Partition: 1 Leader: 2 Replicas: 2,1 Isr: 2,1 Topic: test4 Partition: 2 Leader: 1 Replicas: 1,2 Isr: 2,1