Kafka常用运维命令
启动
kafka启动之前需要先启动zookeeper,如果没有安装zookeeper 可使用kafka自带zookeeper启动
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
正常启动所有信息会打印在控制台,关闭控制台会结束kafka程序,可用后台启动命令
bin/kafka-server-start.sh -daemon config/server.properties 或者
bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 & (&1是一个整体,代表引用标准输出文件描述符,后面一个&代表后台运行)
关闭
bin/zookeeper-server-stop.sh
bin/kafka-server-stop.sh
或者 ps -ef | grep kafka 查出kafka进程的pid 然后 kill -9 kafka进程id
创建和列出topic
创建topic
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic mytest
--bootstrap-server 指定kafka服务ip和端口
--replication-factor 指定备份副本数
--partitions 指定topic分区数
--topic 指定topic名
列出topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
发送消息和接受消息
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytest
this is a message
this is another message
>bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning
kafka设置多broker模式
在单台机器上启动多个kafka进程模拟多机环境
1 复制server.properties文件
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
2 分别修改server.properties文件 内容如下
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
3 启动其他2个kafka进程(加上之前启动kafka进程,现在本机上有3个运行的kafka进程)
> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...
4 创建一个3备份的topic
> bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic
5 查看topic的节点情况,可以使用describe命令
>bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
第一行是所有分区的摘要信息,每个附加行代表一个分区的相关信息,我们这里只有一个分区所以只有一个附加行
Leader 代表读写节点的编号
Replicas 代表备份节点的编号
Isr 代表需要同步节点的编号
向新主题发布一些消息
>bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
my test message 1
my test message 2
消费这些消息
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2
测试一下容错新,根据前面的descibe命令 2号节点为leader节点,现在我们杀掉2号节点的进程
ps -ef | grep server-2.properties
kill -9 进程号
此时再次使用describe命令查看节点情况
>bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 2,1,0 Isr: 1,0
此时leader节点变为1 且2号节点不再同步集中
虽然之前的接受写入的leader节点已经失效,但是现在仍然可以消费之前的数据
>bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message
my another test message