Linux安裝Kafka(PS:附腳本)

1. 前期準備

  • 腳本複製:修改腳本中參數後拷貝腳本,將下面的腳本內容複製,在虛擬機的任意路徑下執行命令vim kafka_manager.sh -> 按下鍵盤的Inster鍵 ->鼠標右鍵粘貼或使用鍵盤上的shift+Insert組合快捷鍵粘貼->按鍵盤ESC鍵->輸入:wq!
  • 執行腳本安裝kafka:  sh kafka_manager.sh install
  • 執行腳本啓動kafka(注意,要先安裝zookeeper,參照鏈接):sh kafka_manager.sh start

2. 腳本

#!/usr/bin/env bash
#######################################
# This shell is for manager kafka
# Author: Coline
# Date: 2020/02/27 00:17
#######################################
readonly SCRIPT_PATH=$(cd `dirname $0`; pwd)
SHELL_NAME=$0
ACTION=$1
CURRENT_USER=`whoami`
hostIp=$(/sbin/ip route get 1| sed 's/^.*src \(\S*\).*$/\1/;q')


# declare where the install package
readonly INSTALL_PACKAGE_WAY=
# declare the install way
readonly INSTALL_WAY=
# declare the kafka owner
readonly USER=
# declare the kafka owner group
readonly USER_GROUP=
# declare kafka log dir
readonly KAFKA_LOG_DIR=
# declare zookeeper host and port
readonly ZOOKEEPER_HOST_PORT=

function usage() {
    echo "Usage: $SHELL_NAME {start|stop|online|offline|check_status}"
    exit 2
}

function log_info() {
    echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
}

function log_error() {
    echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
    exit 1

}

function check_result()
{
    local ret_code=$1
    shift
    local error_msg=$*
    if [[ ${ret_code} -ne 0 ]]; then
        log_error ${error_msg}
    fi
}

function normal_check() {
  # check current director whether have kafka package
  if [[ ! -f ${INSTALL_PACKAGE_WAY} ]]; then
    log_error "pleas check whether install package exists"
  fi

  # check param whether empty
  if [[ -z ${INSTALL_WAY} ]] || [[ -z ${USER} ]] || [[ -z ${USER_GROUP} ]] || [[ -z ${KAFKA_LOG_DIR} ]] || [[ -z ${ZOOKEEPER_HOST_PORT} ]]; then
    log_error "param can not be empty"
  fi
}

function config_properties() {
  local key=$1
  local value=$2
  if [[ $(cat ${INSTALL_WAY}/kafka/config/server.properties |grep "^${key}") ]]; then
    sed -i "s/^${key}=.*/${key}=${value//\//\\/}/g" ${INSTALL_WAY}/kafka/config/server.properties
  else
    echo "${key}=${value}" >> ${INSTALL_WAY}/kafka/config/server.properties
  fi
}

# do something before install
function pre_install(){
  # make install way
  mkdir -p ${INSTALL_WAY}/install

  #create group ${USER}
  grep "^${USER_GROUP}" /etc/group &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user group"
    groupadd ${USER_GROUP}
  fi

  #create user group
  id ${USER} &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user"
    useradd -g ${USER_GROUP} ${USER}
    chage -M 99999 ${USER}
  fi
}

# do install job
function install_kafka(){
  # unzip the package to install way
  tar -zxvf ${INSTALL_PACKAGE_WAY} -C ${INSTALL_WAY}/install
}

function post_install() {
  # create ln of kafka
  local kafka_dir=$(ls -lt ${INSTALL_WAY}/install|grep kafka|head -1|awk '{print $9}')
  ln -s install/${kafka_dir} ${INSTALL_WAY}/kafka

  mkdir -p ${KAFKA_LOG_DIR}

  config_properties broker.id 0
  config_properties port 9092
  config_properties host.name ${hostIp}
  config_properties log.dirs ${KAFKA_LOG_DIR}
  config_properties zookeeper.connect ${ZOOKEEPER_HOST_PORT}

  # change the owner of install way
  chown -R ${USER}:${USER_GROUP} ${INSTALL_WAY}
  chown -R ${USER}:${USER_GROUP} ${KAFKA_LOG_DIR}
}

function install() {
  log_info "------------normal_check------------"
  normal_check
  check_result $? "normal_check failed."
  log_info "normal_check success"

  log_info "------------pre_install-------------"
  pre_install
  check_result $? "pre_install failed."
  log_info "pre_install success"

  log_info "------------install_kafka-------------"
  install_kafka
  check_result $? "install_kafka failed."
  log_info "install_kafka success"

  log_info "------------post_install-------------"
  post_install
  check_result $? "post_install failed."
  log_info "post_install success"

}

# uninstall kafka
function uninstall() {
  # delete the kafka install way
  rm -rf ${INSTALL_WAY}/kafka
  rm -rf ${INSTALL_WAY}/install/*kafka*
}

# start kafka
function start() {
  local zookeeper_pid=$(ps -ef|grep zookeeper|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -z ${zookeeper_pid} ]] ;then
    log_info "please start zookeeper firstly"
    return 0
  fi

  local kafka_pid=$(ps -ef|grep kafka|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${kafka_pid} ]] ;then
    log_info "kafka has been start"
    return 0
  fi

  if [[ ${CURRENT_USER} = ${APP_USER} ]]; then
    source /etc/profile && ${INSTALL_WAY}/kafka/bin/kafka-server-start.sh ${INSTALL_WAY}/kafka/config/server.properties &
  else
    su - ${USER} -c "source /etc/profile && ${INSTALL_WAY}/kafka/bin/kafka-server-start.sh ${INSTALL_WAY}/kafka/config/server.properties &"
  fi
}

# stop kafka
function stop() {
  local kafka_pid=$(ps -ef|grep kafka|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -z ${kafka_pid} ]] ;then
    log_info "kafka process non-exists"
    return 0
  fi

  ${INSTALL_WAY}/kafka/bin/kafka-server-stop.sh ${INSTALL_WAY}/kafka/config/server.properties
  sleep 5
  local kafka_pid=$(ps -ef|grep kafka|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${kafka_pid} ]] ;then
    log_info "kafka pid still exists pid= ${kafka_pid}"
    kill -9 ${kafka_pid}
  fi
}

case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 5
        start
    ;;
    install)
        install
    ;;
    uninstall)
        uninstall
    ;;
    *)
        usage
;;
esac

    參數修改:

INSTALL_PACKAGE_WAY 安裝包路徑,需要全路徑,例如:/root/kafka_2.13-2.4.0.tgz
INSTALL_WAY kafka安裝路徑,例如:/opt/cloud/middleware
USER 服務用戶屬主,例如:root
USER_GROUP 服務用戶用戶組,例如:root
KAFKA_LOG_DIR kafka日誌路徑,例如:/opt/cloud/logs/kafka
ZOOKEEPER_HOST_PORT zookeeper的ip加端口,例如:192.168.167.75:2181

    腳本命令:

sh kafka_manager.sh sh install 安裝kafka
sh kafka_manager.sh uninstall 卸載kafka
sh kafka_manager.sh start 啓動kafka
sh kafka_manager.sh stop 關閉kafka
sh kafka_manager.sh check_status 檢查kafka
sh kafka_manager.sh restart 重啓kafka
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章