目录
Kafka实战记录-目录:https://blog.youkuaiyun.com/weixin_39565597/article/details/104402046
1、启动kafka
# 启动kafka kafka-server-start.sh [-daemon] server.properties [--override property=value]*
# -daemon 是否以守护进程开启
# --override property=value 覆盖配置值,属性property改为value
[root@node1 kafka-2.2.2] ./bin/kafka-server-start.sh -daemon ./config/server.properties
# 查看进程
[root@node1 kafka-2.2.2] jps
49145 Kafka
# 关闭kafka
[root@node1 kafka-2.2.2] ./bin/kafka-server-stop.sh
2、topic主题
主题相关的命令:./bin/kafka-topics.sh
topic:主题、partition:分区
可以理解为一个topic为一条马路,马路上有多个车道(partition),各个车辆(message)进入马路后,选择一个车道,顺序驶入(append)等待绿灯(被消费)。
# 输入topic命令,查看帮助文档,可查看所有参数
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh
# 查看当前所有的topic
# --zookeeper:必传(新版本已换成--bootstrap-server node1:9092,node2:9092,node3:9092,此处是kafka的监听端口,在server.properties可配)
# zookeeper是将数据放于zookeeper,而--bootstrap-server是将数据存于kafka的log目录
# 此处urls可以多个,实现自动的故障转移
# --list 查看列表
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --list
# 创建topic
# --create 说明此条命令为创建topic
# --topic hello 设置topic的名称为hello
# --partitions 2 分区数(即这条马路有多少条车道)
# --replication-factor 2 副本数,对每个分区进行备份,副本数不能大于服务器节点数量,因为副本存放在非当前节点的服务器
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --replication-factor 2 --partitions 2 --create --topic hello
Created topic "hello".
# 查看创建的topic
# --describe 说明此条命令为查看topic
# PartitionCount:2 分区数为2
# ReplicationFactor:2 副本数为2
# Configs:配置信息
# 分区0:hello-0:副本存在于broker0和broker1,且broker0上的数据为leader
# 分区1:hello-1:副本存在于broker1和broker2,且broker1上的数据为leader
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --describe --topic hello
Topic:hello PartitionCount:2 ReplicationFactor:2 Configs:
Topic: hello Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: hello Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
# 查看kafka数据目录
# node1有:hello-0(主)
# node2有:hello-0、hello-1(主)
# node3有:hello-1
[root@node1 kafka-2.2.2] cd data
[root@node1 kafka-2.2.2] ls
# 删除topic(需要server.properties中设置delete.topic.enable=true,否则出现以下警告,删除也是标记删除)
# --delete 说明此条命令为删除命令
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --delete --topic hello
Topic hello1 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
3、producer生产者
生产者相关的命令:./bin/kafka-console.producer.sh
# 查看帮助文档信息
# --broker-list <String: broker-list> 必传,broker集群节点
# --topic <String: topic> 必传,topic名称
[root@node1 kafka-2.2.2] ./bin/kafka-console.producer.sh
# 给topic为hello的主题发送消息
[root@node1 kafka-2.2.2] ./bin/kafka-console.producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic hello
>hello1
4、comsumer消费者
生产者相关的命令:./bin/kafka-console.comsumer.sh
# 查看帮助文档信息
# --bootstrap-server <String: server to REQUIRED (unless old consumer isconnect to> 必传,新版本使用
# --zookeeper <String: urls> REQUIRED (only when using oldconsumer) 必传,旧版本使用
# --from-beginning 从头开始获取队列消息(由于生产者先打开,发送了hello1消息,消费者后打开,如果要获取到hello1,则需要加此参数)
[root@node1 kafka-2.2.2] ./bin/kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --from-beginning
hello1