kafka 命令封装脚本

#!/bin/bash
#kafka集群地址: ip/主机名:9092
KAFKA_CLUSTER=10.10.2.234:9092
#kafka bin目录
KAFKA_HOME_BIN=/opt/kafka_2.12-2.2.2/bin
#分区数量
PARTITIONS=5
#副本数量
REPLICATIONFACTOR=2
#脚本路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

#参数判断不能小于1
if [ $# -lt 1 ]; then
  echo -e "\033[31mAt least two parameters \033[0mare required"
  sh /${SCRIPT_DIR}/kafka --help
  exit
fi
#打印传入的参数
#echo "============Args: $1 $2 ================="


#输入错误参数,报错且返回--help内容
errorFun(){
    echo -e "\033[31mInput Args Error!!!!\033[0m"
    sh /${SCRIPT_DIR}/kafka --help
}


case $1 in
#脚本用法--help
--help)
    echo " Usage: kafka [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
	     
        OPTIONS is none or any of:
          -l or list        <-t> <-g>                                        list all topics/groups
	  -c or create      <topicName> [partitions] [replication-factor]    create default topic or custom topic
          -d or desc        [-t <topicName>] [-g <groupName>]                describe all topics/topic/group
          -del or delete    <-t <topicName>> <-g <groupName>>                delete topic/group
          -p or producer    <topicName>                                      producer data to topic  
          -con or consumer  -e==earliest -l==latest <topicName> <groupName>  consumer data from earliest or latest
          -r or reset       <topicName> <groupName> <to-offset>              reset all partitions offset to earliest,reset all partitions 
                            <topicName:partitionNum> <groupName> <to-offset> offset to optional position,reset one of partitions offset to 
                                                                             optional position
         "
    exit 0
    ;;
	
#创建topic
create|-c)
  if [ $# -eq 2 ]; then
    ${KAFKA_HOME_BIN}/kafka-topics.sh --create --topic "$2" \
    --bootstrap-server ${KAFKA_CLUSTER} \
    --partitions ${PARTITIONS} \
    --replication-factor ${REPLICATIONFACTOR}
  elif [ $# -eq 4 ]; then
    if [ ! -n "$(echo $3| sed -n "/^[0-9]\+$/p")" ]||[ ! -n "$(echo $4| sed -n "/^[0-9]\+$/p")" ];then
      errorFun
    else
      ${KAFKA_HOME_BIN}/kafka-topics.sh --create --topic "$2" \
      --bootstrap-server ${KAFKA_CLUSTER} \
      --partitions "$3" \
      --replication-factor "$4"
    fi
  #if [ $# != 2 ]&&[ $# != 4 ];then
  else
    errorFun
  fi
  ;;
  
#列出当前kafka中的topic和消费组
list|-l)
  if [ $# -eq 2 ]; then
    if [ "$2" == "-t" ];then
      ${KAFKA_HOME_BIN}/kafka-topics.sh --list \
      --bootstrap-server ${KAFKA_CLUSTER}
    elif [ "$2" == "-g" ];then
      ${KAFKA_HOME_BIN}/kafka-consumer-groups.sh --list \
       --bootstrap-server ${KAFKA_CLUSTER}  
    else
      errorFun 
    fi
  else
  #if [ $# != 2 ]&&[ "$2" != "-t" ]&&[ "$2" != "-g" ]; then
    echo -e "At least \033[31mtwo parameters \033[0mare required"
    sh /${SCRIPT_DIR}/kafka --help
  fi
  ;;
  
#查询所有topic详情或者单个topic的详情
desc|-d)
  if [ $# -eq 1 ]; then
    ${KAFKA_HOME_BIN}/kafka-topics.sh --describe \
    --bootstrap-server ${KAFKA_CLUSTER}
  elif [ $# -eq 3 ]; then
    if [ "$2" == "-t" ];then
      ${KAFKA_HOME_BIN}/kafka-topics.sh --describe \
      --bootstrap-server ${KAFKA_CLUSTER} \
      --topic "$3"
    elif [ "$2" == "-g" ];then
      ${KAFKA_HOME_BIN}/kafka-consumer-groups.sh --describe --group "$3" \
      --bootstrap-server ${KAFKA_CLUSTER} 
    else
      errorFun
    fi
  else
     errorFun
  fi
  ;;
  
#生产数据
producer|-p)
  if [ $# -eq 2 ]; then
    ${KAFKA_HOME_BIN}/kafka-console-producer.sh --topic "$2" \
    --broker-list ${KAFKA_CLUSTER}
  else
    errorFun
  fi
  ;;
  
#消费数据
consumer|-con)
  if [ $# -eq 4 ]; then
    if [ "$2" == "-e" ]; then
      ${KAFKA_HOME_BIN}/kafka-console-consumer.sh --topic "$3" \
      --bootstrap-server ${KAFKA_CLUSTER} \
      --from-beginning \
      --group "$4"
    elif [ "$2" == "-l" ];then
       ${KAFKA_HOME_BIN}/kafka-console-consumer.sh --topic "$3" \
      --bootstrap-server ${KAFKA_CLUSTER} \
      --group "$4"
    fi	
  else
    errorFun
  fi
  ;;
  
  
#重置偏离量
-r)
  if [ $# -eq 3 ]; then
     ${KAFKA_HOME_BIN}/kafka-consumer-groups.sh --topic "$2" --group "$3" --reset-offsets --to-earliest --execute \
     --bootstrap-server ${KAFKA_CLUSTER}
  elif [ $# -eq 4 ]&&[ -n "$(echo $4| sed -n "/^[0-9]\+$/p")" ]; then
     ${KAFKA_HOME_BIN}/kafka-consumer-groups.sh --topic "$2" --group "$3" --reset-offsets --to-offset "$4" --execute \
     --bootstrap-server ${KAFKA_CLUSTER}
  else
    errorFun
  fi	
  ;;
  
#逻辑删除topic或消费组
-del|delete)
  if [ $# -eq 3 ]; then
    if [ "$2" == "-t" ];then
      ${KAFKA_HOME_BIN}/kafka-topics.sh --delete --topic "$3" \
      --bootstrap-server ${KAFKA_CLUSTER}
    elif [ "$2" == "-g" ];then
      ${KAFKA_HOME_BIN}/kafka-consumer-groups.sh --delete --group "$3" \
      --bootstrap-server ${KAFKA_CLUSTER}
    else
      errorFun
    fi
  else  
    echo -e "At least \033[31mtwo parameters \033[0mare required"
    sh /${SCRIPT_DIR}/kafka --help
  fi
  ;; 
*)
  errorFun
  ;;
esac

#!/bin/bash

kafka_topic_bin=/opt/kafka/bin/kafka-topics.sh
kafka_consumer_bin=/opt/kafka/bin/kafka-consumer-groups.sh
zks="127.0.0.1:2181"
servers="127.0.0.1:9092"

###创建topic
createTopic(){
  topicName=$2
  sh $kafka_topic_bin --bootstrap-server $servers --create --topic $topicName --partitions 3 --replication-factor 2
  echo ">>>>>> create topic: $topicName success."
  ##--config max.message.bytes=12800000 --config flush.messages=1 --partitions 5 --replication-factor 1
}

###查看topic
descTopic(){
  descType=$2
  topicName=$3
  if [ "${descType}" = "list" ];then
    sh $kafka_topic_bin --bootstrap-server $servers --list
  elif [ "${descType}" = "describe" ];then
    sh $kafka_topic_bin --bootstrap-server $servers --describe --topic $topicName
  else
    echo "------query error,please check scripts params define."
  fi
}

###删除topic
deleteTopic(){
  topicName=$2
  sh $kafka_topic_bin --zookeeper $zks --delete --topic $topicName
  echo ">>>>>> delete topic: $topicName success."
}

###修改topic
alterTopic(){
  $topicName=$2
  $config=$3
  sh $kafka_topic_bin --zookeeper $zks --alter --topic $topicName $config
  #sh $kafka_topic_bin --zookeeper $zks --alter --topic $topicName --config max.message.bytes=128000
  #sh $kafka_topic_bin --zookeeper $zks --alter --topic $topicName --delete-config max.message.bytes
  #Kafka分区数量只允许增加,不允许减少 
  #sh $kafka_topic_bin --zookeeper $zks --alter --topic $topicName --partitions 5
  echo ">>>>>> alter topic: $topicName success."
}

##查看消费组
consumer(){
  optype=$2
  consumer_group=$3
  if [ "${optype}" = "describe" ];then
    $kafka_consumer_bin --bootstrap-server "${servers}" --group "${consumer_group}" --describe
  elif [ "${optype}" = "delete" ];then
    $kafka_consumer_bin --bootstrap-server "${servers}" --group "${consumer_group}" --delete
    echo "...."
  else
    echo ">>>>>> consumer params error, please check script define."
  fi
}

#kafka-console-producer.sh --broker-list localhost:9092 --topic test
#kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

case $1 in
  create)
    createTopic $1 $2;;
  query)
    descTopic $1 $2 $3;;
  delete)
    deleteTopic $1 $2;;
  alter)
    alterTopic $1 $2 $3;;
  consumer)
    consumer $1 $2 $3;;
  *)
   echo "Usage: $0 (create|desc|del|alter|consumerDesc).";;
esac

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值