kafka进群搭建
安装顺序
1. 解压安装包
tar -zxvf kafkaXXXX
2. 修改配置文件
broker.id=0 --在集群内唯一
num.partitions = --每个主题的分区数量,默认是1,可以增加分区的数量但不能减少分区的数量
default.replication.factor=2 --消息备份副本数,默认为1,即不进行备份
listeners --socket的监听地址
log.dir = kakfa2.0.0/kafka-log --kafka消息数据的存储位置
zookeeper = centos01:2181,centos02:2181 --zookeeper连接
3. 发送安装文件到其他节点
scp -r /opt/modules/kafka-2.0.0 hadoop@centos02:/opt/modules/
4. 启动zk集群
在每台机上执行zkServer.sh start
5. 启停kfka集群
在每台机上执行
bin/kafka-server-start.sh -daemon config/server.properties
(bin/kafka-server-start.sh config/server.properties &
)
关闭 :bin/kafka-server-stop.sh stop
6. 创建topic
bin/kafka-topics.sh --create --zookeeper centos01:2181,centos02:2181,centos03:2181 --replication-factor 2 --partitions 2 --topic topictest
--查看topic
bin/kafka-topics.sh --list --zookeeper centos01:2181
--查看主题的详情
bin/kafka-topics.sh --describe --zookeeper centos01:2181 --topic topictest
Topic:topictest PartitionCount:2 ReplicationFactor:2 Configs:
Topic: topictest Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: topictest Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
topic :主题名称
PartitionCount:分区数量
ReplicationFactor:副本数量
Partition:分区编号
Leader:领导者副本所在的broker,这里指安装kafka集群时所设置的broker.id
Replicas:分区副本所在的broker,指安装kafka集群时所设置的broker.id
Isr:ISR列表中的副本所在的broker(包括领导者副本),同样指安装kafka集群时所设置的broker.id
7. 创建生产者
bin/kafka-console-producer.sh --broker-list centos01:9092,centos02:9092,centos03:9092 --topic topictest
8. 创建消费者
bin/kafka-console-consumer.sh --bootstrap-server centos01:9092,centos02:9092,centos03:9092 --topic topictest
bin/kafka-console-consumer.sh --bootstrap-server centos01:9092,centos02:9092,centos03:9092 --topic test5
注意:
kafka规定,同一个分区内的消息只能被同一个消费者组中的一个消费者消费。而本例中的两个消费者正是同属于一个消费者组,且主题topictest有两个分区,所以需要两个消费者才能各自按序消费。
- 同一个消费者组内,消费者数量不能多于分区数量,否则多出的消费者不能消费消息。
- 如果需要全局都按顺序消费消息,可以通过给一个主题设置一个分区的方法实现,但这也意味着一个消费者组只能有一个消费者。
kafka命令
查看kafka的所有topic
kafka-topics.sh --zookeeper centos01:2181 --list
彻底删除Kafka中的topic
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
2、Kafka 删除topic的命令是:
./bin/kafka-topics --delete --zookeeper 【zookeeper server】 --topic 【topic name】
如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion
你可以通过命令:./bin/kafka-topics --zookeeper 【zookeeper server】 --list 来查看所有topic
此时你若想真正删除它,可以如下操作:
(1)登录zookeeper客户端:命令:./bin/zookeeper-client
(2)找到topic所在的目录:ls /brokers/topics
(3)找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。
另外被标记为marked for deletion的topic你可以在zookeeper客户端中通过命令获得:ls /admin/delete_topics/【topic name】,
如果你删除了此处的topic,那么marked for deletion 标记消失
zookeeper 的config中也有有关topic的信息: ls /config/topics/【topic name】暂时不知道有什么用
总结:
彻底删除topic:
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
2、如果配置了delete.topic.enable=true直接通过命令删除,如果命令删除不掉,直接通过zookeeper-client 删除掉broker下的topic即可。