Java:jdk1.8
操作系统:CentOS
ZK:3.4.10
Kafka:2.12-2.0.0
ZK 安装参考:分布式ZooKeeper-3.4.10集群安装
# broker的全局唯一编号,不能重复
broker.id=0
# 监听
listeners=PLAINTEXT://:9092
# 日志目录
log.dirs=/data/kafka/logs
# 配置zookeeper的连接(如果不是本机,需要该为ip或主机名)
zookeeper.connect=172.18.20.14:2181,172.18.11.126:2181,172.18.11.128:2181
启动Zookeeper
启动Kafka
./bin/kafka-server-start.sh ./config/server.properties 1>/dev/null 2>&1 &
如果需要启动多个broker,配置文件中broker.id listeners log.dirs 必须修改。
# broker的全局唯一编号,不能重复
broker.id=1
# 监听
listeners=PLAINTEXT://:9092
# 日志目录
log.dirs=/data/kafka/logs
# 配置zookeeper的连接(如果不是本机,需要该为ip或主机名)
zookeeper.connect=172.18.20.14:2181,172.18.11.126:2181,172.18.11.128:2181
分别在172.18.20.14 ,172.18.11.126 ,172.18.11.128 启动3个broker。
创建topic(指定副本数量为3)
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic test
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 10 --topic test1
查看所有的topic信息
./bin/kafka-topics.sh --list --zookeeper localhost:2181
查看某个topic的详细信息
./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
[root@iZ94m4komqtZ kafka_2.12-2.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1
Topic:test1 PartitionCount:10 ReplicationFactor:3 Configs:
Topic: test1 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: test1 Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: test1 Partition: 2 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
Topic: test1 Partition: 3 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1
Topic: test1 Partition: 4 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
Topic: test1 Partition: 5 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
Topic: test1 Partition: 6 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: test1 Partition: 7 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: test1 Partition: 8 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
Topic: test1 Partition: 9 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1
其中Replicas
和Isr
中的1,2,0
就对应着3个broker
他们的broker.id
属性。
Topic信息修改
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --config max.message.bytes=128000
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --delete-config max.message.bytes
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 10
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 3 ## Kafka分区数量只允许增加,不允许减少
启动生产者
./bin/kafka-console-producer.sh --broker-list 172.18.20.14:9092,172.18.11.126:9092,172.18.11.128:9092 --topic test
启动消费者
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test
启动消费组
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --group testg
查看消费组名称信息
#查看group 列表
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
#看指定group
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group new-consumer-test
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test1 3 1 1 0 new-consumer-cl-80a33e58-df25-4bce-ae93-bf37ecd6555b /172.18.11.126 new-consumer-cl
test1 0 0 0 0 new-consumer-cl-80a33e58-df25-4bce-ae93-bf37ecd6555b /172.18.11.126 new-consumer-cl
test1 4 1 1 0 new-consumer-cl-80a33e58-df25-4bce-ae93-bf37ecd6555b /172.18.11.126 new-consumer-cl
test1 1 1 1 0 new-consumer-cl-80a33e58-df25-4bce-ae93-bf37ecd6555b /172.18.11.126 new-consumer-cl
test1 2 1 1 0 new-consumer-cl-80a33e58-df25-4bce-ae93-bf37ecd6555b /172.18.11.126 new-consumer-cl
test1 7 1 1 0 new-consumer-cl-bc9a3300-8682-42c4-8e64-fb06d2981d43 /172.18.11.128 new-consumer-cl
test1 8 1 1 0 new-consumer-cl-bc9a3300-8682-42c4-8e64-fb06d2981d43 /172.18.11.128 new-consumer-cl
test1 9 1 1 0 new-consumer-cl-bc9a3300-8682-42c4-8e64-fb06d2981d43 /172.18.11.128 new-consumer-cl
test1 6 0 0 0 new-consumer-cl-bc9a3300-8682-42c4-8e64-fb06d2981d43 /172.18.11.128 new-consumer-cl
test1 5 1 1 0 new-consumer-cl-bc9a3300-8682-42c4-8e64-fb06d2981d43 /172.18.11.128 new-consumer-cl
#查看分组成员
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group new-consumer-test --members
topic到group质检是发布订阅的通信方式,即一条topic会被所有的group消费,属于一对多模式;group到consumer是点对点通信方式,属于一对一模式。
不使用group的话,启动10个consumer消费一个topic,这10个consumer都能得到topic的所有数据,相当于这个topic中的任一条消息被消费10次。
使用group的话,连接时带上groupid,topic的消息会分发到10个consumer上,每条消息只被消费1次。
容错测试
kill其中一个broker,消息队列仍然正常。