一、Kafka提供的shell操作命令
下面只列出常用选项,其他选项请参考官方文档
1. kafka-topics.sh
(1) 语法
kafka-topics.sh --bootstrap-server host1:port1,... --(list|describe|create|alter|delete) [--可选选项]
(2) 必要选项
选项名 | 描述 |
bootstrap-server host1:prot1,... | 指定kafkaServer的连接地址,如果要指定多台kafkaServer的连接地址,使用逗号(,)分割 |
list | 列出已创建的topic列表 |
describe | 显示某个topic的详细信息,列出的信息中值得注意的是Replicas和ISR,Replicas是当前分区的副本列表,排在第一个的副本就是当前分区的Leader,如果当前Leader挂掉的话,会按照顺序选择后面一个位于ISR中的副本作为新的Leader;ISR是当前分区能够在指定时间同步数据的broker.id列表。 |
create | 创建topic |
alter | 修改topic的属性(例如:增加分区数,不能减少分区数) |
delete | 删除topic |
(3) 可选选项
选项名 | 描述 |
topic topic_name | 指定(要删除/创建/查看详细信息的)topic |
replication-factor intNum | 指定(要创建的)topic中每个分区的副本数量 |
partitions intNum | 指定(要创建/更改的)topic中分区的数量 |
2. kafka-console-producer.sh
(1) 语法
kafka-console-producer.sh --broker-list host1:prot1,... --topic topic-name
(2) 选项
选项名 | 描述 |
broker-list host1:prot1,... | 指定kafkaServer的连接地址,如果要指定多台kafkaServer的连接地址,使用逗号(,)分割 |
topic topic-name | 指定生产的消息发往哪一个topic |
3. kafka-console-consumer.sh
如果不指定消费者组,每次启动一个消费者消费时,都会新建一个消费者组(当前消费者属于该消费者组)。
消费者组可以同时消费多个Topic;
(1) 语法
kafka-console-consumer.sh --bootstrap-server host1:port1,... --topic topic-name [--可选选项]
(2) 必要选项
选项名 | 描述 |
bootstrap-serverr host1:port1,... | 指定kafkaServer的连接地址,如果要指定多台kafkaServer的连接地址,使用逗号(,)分割 |
topic topic-name | 指定从哪一个topic中消费消息 |
(3) 可选选项
选项名 | 描述 |
from-beginning | 如果要消费的topic中已经存在数据,且当前消费者属于一个新的消费者组,即当前消费者组没有在指定topic中的消费记录,这个时候,启动的消费者不会从开始消费topic中的消息,而是直接记录该消费者组在指定topic中的消费记录为最末端。 |
group group-name | 以指定消费者所属消费者组的方式启动消费者。 |
consumer.config $KAFKA_HOME/config/consumer.properties | consumer.properties文件中有意向配置:group.id,改配置指定消费者启动后所属的消费者组。 |
二、封装脚本
(1) 脚本文件
# 在~/bin下新建脚本文件名为:kafka-ops.sh
# 该脚本目前只支持kafka-topics.sh、kafka-console-producer.sh、kafka-console-consumer.sh的命令使用
# 有兴趣的可以自行增加支持的命令
# 脚本内容如下
#!/bin/bash
if [[ $# -le 1 ]]
then
echo 'kafka-ops.sh (topics|producer|consumer) options'
exit 1
fi
case $1 in
"topics"|"producer"|"consumer")
declare -A shellName
shellName[topics]='kafka-topics.sh'
shellName[producer]='kafka-console-producer.sh'
shellName[consumer]='kafka-console-consumer.sh'
declare -A brokersPropertyName
brokersPropertyName[topics]='--bootstrap-server'
brokersPropertyName[producer]='--broker-list'
brokersPropertyName[consumer]='--bootstrap-server'
kafkaServerPort=$(awk '/listeners=PLAINTEXT:\/\/:/{print $0}' $KAFKA_HOME/config/server.properties | grep -o -E '[0-9]+')
brokers=""
connectionString=$(awk -F'=' '/zookeeper\.connect=/{print $2}' $KAFKA_HOME/config/server.properties)
for host in $(cd /home/$USER/bin;java -cp ZookeeperDataGetter-1.0-jar-with-dependencies.jar com.fig.reader.ZookeeperDataReader $connectionString /brokers/ids host)
do
brokers=${brokers}${host}':'${kafkaServerPort}','
done
brokers=$(echo $brokers | grep -E -o '.+[^,]{1}')
options="$*"
options=$(echo ${options#* })
${shellName[$1]} ${brokersPropertyName[$1]} $brokers $options
;;
*)
echo 'kafka-ops.sh (topics|producer|consumer) options'
exit 1
;;
esac
# 保存退出、赋予执行权限
chmod +x ~/bin/kafka-ops.sh
(2) 使用方式
kafka-ops.sh (topics|producer|consumer) options
# 例如
kafka-ops.sh topics --create --topic first --partitions 3 --replication-factor 3