Apache Kafka 安装步骤

概览

安装过程总共分为 3 大块,第一 Java 环境不必多说,第二 Zookeeper 安装,第三 Kafka 安装。

概念了解

Kafka 有几个重要的概念需要先了解一下

名词 解释
broker 可以理解为 Kafka 所在的服务器
ZooKeeper 分布式服务框架在 Kafka 中的作用主要负责保存 topic,partition 元数据,和对 broker 的监控及治理,以及 partition 的 leader 选举(partition 可以有多个副本,但是只有一个处于工作状态,副本只是负责同步数据,当 leader partition 死掉了,会把一个副本的 partition 升级为 leader )
topic 主题,可以理解为消息的分类
partition 分区,从大的概念来说 topic 中的消息都是存放在 patition 中,一个 topic 可以有多个 partition, 一个 partition 可以有多个副本
offset 偏移量,在 Kafka 中 offset 是 partition 中消息序列号,可以认为是这个消息的唯一标识
segment 多个大小相等的 segment file (段) 组成了一个 partition

Java 环境安装

https://yusure.cn/backend/320.html

ZooKeeper框架安装

下载ZooKeeper

官网:http://zookeeper.apache.org/releases.html
请选择新版本,替换下载链接,目前最新版本 zookeeper-3.4.14

cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar zvxf zookeeper-3.4.14.tar.gz

创建配置文件

cd zookeeper-3.4.14
# 创建数据目录 #
mkdir data

cd conf
cp zoo_sample.cfg zoo.cfg

修改 dataDir

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/opt/zookeeper-3.4.14/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

切到 ZK 安装目录,接下来就可以启动 zookeeper 服务器了。

启动 ZooKeeper 服务器

bin/zkServer.sh start

启动响应:

[root@vm172-31-110-6 zookeeper-3.4.14]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

启动 CLI 连接 ZK,测试连通性,会看到 Welcome to ZooKeeper! 的回显。

bin/zkCli.sh

停止 Zookeeper 服务器

bin/zkServer.sh stop

Apache Kafka安装

下载 Kafka

官方下载地址:http://archive.apache.org/dist/kafka/

cd /opt
wget http://archive.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz
tar zvxf kafka_2.12-2.2.0.tgz
cd /opt/kafka_2.12-2.2.0

配置文件

config/server.properties

启动 Kafka

bin/kafka-server-start.sh config/server.properties
# 生产环境,后台运行 #
nohup bin/kafka-server-start.sh config/server.properties &

停止 Kafka

bin/kafka-server-stop.sh config/server.properties

基本操作

创建一个名为 Hello-Kafka 的主题,其中包含一个分区和一个副本因子。
创建 topic 后,您可以在终端窗口中获取通知,可以在 /tmp/kafka-logs 中看到创建 topic 的日志。

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Hello-Kafka

要获取 Kafka 服务器中的 topic 列表

bin/kafka-topics.sh --list --zookeeper localhost:2181

启动生产者以发送消息

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic Hello-Kafka

启动消费者以接收消息

bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic Hello-Kafka --from-beginning

删除主题

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic Hello-kafka

界面管理工具

Kafka Manager https://yusure.cn/backend/310.html

总结

Apache Kafka 教程 https://www.w3cschool.cn/apache_kafka/
以上是 Kafka 安装和一些使用的简单操作,生产环境 Kafka Cluster 的配置和运维比这复杂一些,需要修改不同的配置文件。

Linux(Ubuntu CentOS) 安装 Java JDK

CentOS

Centos 利用 yum 源来安装jdk(此方法不需要配置环境变量)
查看yum库中的java安装包

yum list java*
yum list java-1.8*

安装1.8.0的所有文件

yum -y install java-1.8.0-openjdk*

安装完之后,默认的安装目录是在: /usr/lib/jvm/

Ubuntu

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
# 设置系统默认jdk #
sudo update-java-alternatives -s java-8-oracle

查看版本

[root@vm172-31-110-6 ~]# java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@vm172-31-110-6 ~]# javac -version
javac 1.8.0_201

Kafka Manager 编译 + 部署运行

准备条件

本地有 sbt 环境
Java 8+

下载

cd /usr/local/src
git clone https://github.com/yahoo/kafka-manager

修改下载源

由于编译时需要用到sbt下载依赖jar包, sbt默认又是用的国外源, 所以下载速度奇慢, 建议将sbt的下载源改成阿里云的私有云。
安装好sbt后, 用户目录下一般都会有 .sbt 这个文件夹, 这个文件夹是隐藏的, ls -a 可以看到。

cd ~/.sbt/
vim repositories

在根目录下新建文件 repositories, 并加入如下内容:

[repositories]
public: http://maven.aliyun.com/nexus/content/groups/public/
typesafe:http://dl.bintray.com/typesafe/ivy-releases/ , [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
ivy-sbt-plugin:http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
sonatype-oss-releases

sonatype-oss-snapshots

- 阅读全文 -

ubuntu 安装 sbt

起因

准备装个 Kafka Manager 来管理 Kafka 集群,发现是用 Scala 开发的,需要用 sbt 去编译代码,那就先把 sbt 环境在本地搞起来!

介绍

sbt 是类似 Maven 的构建工具,全称为 Simple build tool,是 Scala 的标准构建工具。

安装步骤

下载

官网地址:http://www.scala-sbt.org/download.html

cd /usr/local/src
wget https://piccolo.link/sbt-1.2.8.zip

解压

解压到 /usr/local/ 目录

unzip sbt-1.2.8.zip -d /usr/local/

创建运行脚本

cd /usr/local/sbt
vim sbt

加入如下内容,保存退出

#!/bin/bash
BT_OPTS="-Xms512M -Xmx512M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar /usr/local/sbt/bin/sbt-launch.jar "$@"

赋权

chmod +x sbt

配置环境变量

vim /etc/profile

在文件底部加入如下内容,保存退出

export SBT_HOME=/usr/local/sbt
export PATH=${SBT_HOME}/bin:$PATH

使生效

source /etc/profile

验证

输入 sbt 进入到交互界面,输入 sbtVersion 查看版本号。

root@ubuntu:/usr/local/sbt# sbt
[warn] No sbt.version set in project/build.properties, base directory: /usr/local/sbt
[info] Set current project to sbt (in build file:/usr/local/sbt/)
[info] sbt server started at local:///root/.sbt/1.0/server/c04b82b170623c189ad8/sock
sbt:sbt> sbtVersion
[info] 1.2.8

总结

安装过程还算简单,网上看到一些用 sbt sbt-version 来查看版本号,我是没成功过,也可能是跟版本有关系。

Linux Shell脚本实现根据进程名杀死进程

起因

  为什么会写这篇文章呢,先说一下背景,因为一个生产环境的机器内存占用一直很高,经过排查发现是一个 consumer 的消费脚本中并发 http client 没有 close,导致定时每小时跑完的脚本一直在那里放着占用内存,时间久了内存占用就上来了,很快我就上了个 patch 修复了这个问题,但是那些跑完的脚本怎么处理呢?还用说嘛,当然要 kill 掉了。

脚本

手动每个去 kill 那真是太慢了,直接找个批量处理的脚本,将以下内容保存为 kill.sh,赋予执行权限,传入脚本的名称即可批量 kill 掉。

./kill.sh procedure_name
#!/bin/sh

if [ $# -lt 1 ]
then
  echo "缺少参数:procedure_name"
  exit 1
fi

PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
  echo "Kill the $1 process [ $i ]"
  kill -9 $i
done

一句话命令

感觉上面的脚本麻烦,可以直接使用下面的一句来实现。

ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9

总结

杀掉脚本之后,内存立刻恢复正常占用,顿时感觉清爽了许多。

  1. 保证良好的编码习惯,一些资源用过之后及时 close。
  2. 定期查看生产环境的各种 logs,查找资料并解决报错,技术积累大部分来源于解决生产环境问题。