命令行方式
与主题有关的命令
- 需要连接上zookeeper集群操作(主题的名字以及分区数据、副本数等属于元数据,元数据是在zookeeper中存储)
- 查看kafka服务器中有哪些主题
kafka-topics.sh --zookeeper node1:2181 --list
- 创建一个主题
kafka-topics.sh --zookeeper node1:2181 --create --partitions 分区数 --replication-factor 备份数 --topic 主题的名字
- 查看某个主题的详情
一个主题可以有多个分区,一个分区可以设置多个备份,如果分区有多个副本,那么消费者消费哪个副本?kafka中的主题的分区的多个副本有一个leader和follower区分 leader角色的分区副本会对外让消费者消费,让生产者去写数据,follower的分区副本相当于是一个热备
kafka-topics.sh --zookeeper node1:2181 --describe --topic 主题的名字
- 删除某个主题
kafka-topics.sh --zookeeper node1:2181 --delete --topic 主题的名字
与生产者生产消息有关的命令
- 生产者生产消息的命令
kafka自带的一个简易的生产者,接受控制台的输入数据生产到对应的主题中
kafka-console-producer.sh --broker-list node:9092,node:9092,node3:9092 --topic 主题的名字
与消费者消费消息有关的命令
- 旧的消费者命令行代码
需要连接zookeeper集群消费数据----分区无法指定
kafka-console-consumer.sh --zookeeper node1:2181 --topic 主题名
- 新的消费者命令行代码
需要连接kafka集群消费数据---可以手动指定消费者消费主题的哪个分区
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic 主题名 --partition 分区
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic 主题名 --from-beginning
kafka的工作流程
生产者的写入数据的流程
- 写流程

- 生产者先从zookeeper的"/brokers/.../state"节点找到partition的leader
| [zk: localhost:2181(CONNECTED) 4] get /brokers/topics/bbb/partitions/0/state |
| {"controller_epoch":13,"leader":1,"version":1,"leader_epoch":0,"isr":[1,0]} |
| [zk: localhost:2181(CONNECTED) 5] get /brokers/topics/bbb/partitions/1/state |
| {"controller_epoch":13,"leader":2,"version":1,"leader_epoch":0,"isr":[2,1]} |
| [zk: localhost:2181(CONNECTED) 6] get /brokers/topics/bbb/partitions/2/state |
| {"controller_epoch":13,"leader":0,"version":1,"leader_epoch":0,"isr":[0,2]} |
- producer将消息发送给该leader
- leader将消息写入本地log
- followers从leader拉取消息,写入本地log后向leader发送ACK
- leader收到所有ISR中的replication的ACK后,增加HW(high watermark,最后commit 的offset)并向producer发送ACK
- 消费者都是以消费者组的形式存在的,

- 消费者组可能只有一个消费者,也可以有多个消费者,

- 一个消费者组能消费一个Topic的数据,也能消费多个Topic的数据

- 一个topic中的一个分区数据在一个消费者组中只能被一个消费者消费,但是可以被多个消费者组消费

- 在一般情况下,定义消费者组的时候,消费者组当中的消费者个数要和topic的分区数量保持一致。
- 消费者数量可以小于分区数量,但是不建议大于分区数
- 当消费者数量大于分区数时,消费者剩余

| # 修改consumer.properties中的group.id属性 |
| [root@node2 config]# pwd |
| /opt/app/kafka-0.11.0.0/config |
| [root@node2 config]# vi consumer.properties |
| { |
| group.id=uek01 |
| } |
| |
| [root@node3 config]# pwd |
| /opt/app/kafka-0.11.0.0/config |
| [root@node3 config]# vi consumer.properties |
| { |
| group.id=uek01 |
| } |
| |
| [root@node1 ~]# kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic t1 |
| |
| |
| [root@node2 ~]# kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic t1 -consumer.config /opt/app/kafka-0.11.0.0/config/consumer.properties |
| |
| |
| [root@node3 ~]# kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic t1 -consumer.config /opt/app/kafka-0.11.0.0/config/consumer.properties |
| 输入:1 2 3 4 5 6 7 8 |
| node2消费情况:2 4 6 8 |
| node3消费情况:1 3 5 7 9 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?