「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」
创建topic
创建一个名字为test的主题,有一个分区,有三个副本。一个主题下可以有多个分区,每个分区可以用对应的副本。
在Docker环境中演示
#登录到Kafka容器
docker exec -it 9218e985e160 /bin/bash
#切换到bin目录
cd opt/kafka/bin/
#执行创建
kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 3 --partitions 1 --topic test
- --create:新建命令
- --zookeeper:Zookeeper节点,一个或多个
- --replication-factor:指定副本,每个分区有三个副本。
- --partitions:1
查看主题命令
查看kafka当中存在的主题
kafka-topics.sh --list --zookeeper zoo1:2181,zoo2:2181,zoo3:2181
__consumer_offffsets 这个topic是由kafka自动创建的,默认50个分区,存储消费位移信息(offffset),老版本架构中是存储在Zookeeper中。
生产者生产数据
模拟生产者来生产数据:
Kafka自带一个命令行客户端,它从文件或标准输入中获取输入,并将其作为message(消息)发送到Kafka集群。默认情况下,每行将作为单独的message发送。
运行producer,然后在控制台输入一些消息以发送到服务器。
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093,kafka3:9094 --topic test
This is a message
This is another message
消费者消费数据
kafka-console-consumer.sh --bootstrap-server kafka1:9092, kafka2:9093, kafka3:9094 --topic test --from-beginning
在使用的时候会用到bootstrap与broker.list其实是实现一个功能,broker.list是旧版本命令。
- 确保消费者消费的消息是顺序的,需要把消息存放在同一个topic的同一个分区
- 一个主题多个分区,分区内消息有序。
运行describe的命令
运行describe查看topic的相关详细信息
#查看topic主题详情,Zookeeper节点写一个和全部写,效果一致
kafka-topics.sh --describe --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --topic test
#结果列表
Topic: test1 PartitionCount: 3 ReplicationFactor: 3 Configs:
Topic: test1 Partition: 0 Leader: 1001 Replicas: 1001,1003,1002 Isr: 1001,1003,1002
Topic: test1 Partition: 1 Leader: 1002 Replicas: 1002,1001,1003 Isr: 1002,1001,1003
Topic: test1 Partition: 2 Leader: 1003 Replicas: 1003,1002,1001 Isr: 1003,1002,1001
这是输出的解释。第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。有几个分区,下面就显示几行
- leader:是负责给定分区的所有读取和写入的节点。每个节点将成为随机选择的分区部分的领导者。
- replicas:显示给定partiton所有副本所存储节点的节点列表,不管该节点是否是leader或者是否存活。
- isr:副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步
增加topic分区数
任意kafka服务器执行以下命令可以增加topic分区数
kafka-topics.sh --zookeeper zkhost:port --alter --topic test --partitions 8
增加配置
flflush.messages:此项配置指定时间间隔:强制进行fsync日志,默认值为None。例如,如果这个选项设置为1,那么每条消息之后都需要进行fsync,如果设置为5,则每5条消息就需要进行一次fsync。
一般来说,建议你不要设置这个值。此参数的设置,需要在"数据可靠性"与"性能"之间做必要的权衡。
- 如果此值过大,将会导致每次"fsync"的时间较长(IO阻塞)。
- 如果此值过小,将会导致"fsync"的次数较多,这也意味着整体的client请求有一定的延迟,物理server故障,将会导致没有fsync的消息丢失。
动态修改kakfa的配置
kafka-topics.sh --zookeeper zoo1:2181 --alter --topic test --config flush.messages=1
删除配置
动态删除kafka集群配置
kafka-topics.sh --zookeeper zoo1:2181 --alter --topic test --delete-config flush.messages
删除topic
目前删除topic在默认情况只是打上一个删除的标记,在重新启动kafka后才删除。如果需要立即删除,则需要在server.properties中配置:delete.topic.enable=true(集群中的所有实例节点),一个主题会在不同的kafka节点中分配分组信息和副本信息
然后执行以下命令进行删除topic
kafka-topics.sh --zookeeper zoo1:2181 --delete --topic test