一、参考
二、java jdk安装配置
三、Zookeeper安装配置
四、Kafka集群搭建
五、测试验证
http://www.cnblogs.com/luotianshuai/p/5206662.html
https://docs.confluent.io/2.0.0/kafka/ssl.html
http://www.cnblogs.com/huxi2b/p/7382144.html
http://www.cnblogs.com/huxi2b/p/7427815.html
https://blog.csdn.net/jsjsjs1789/article/details/53161985
https://streamsets.com/blog/fast-easy-access-secure-kafka-clusters/
https://docs.confluent.io/2.0.0/kafka/ssl.html
(3台都需要执行)
将jdk-8u144-linux-x64.tar.gz 压缩包放到/usr/java目录下
1. 解压缩
2. 得到jdk1.8.0_144 文件夹
3 使用vim 编辑 /etc/profile ,在文件的末尾添加以下语句,配置java环境变量,为后续操作准备
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
4. 使 /etc/profile文件生效
5. 查看配置是否成功出现这个信息,说明配置成功
1. Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群。
2. 软件环境
(1)centos 虚拟机-我的测试)ip地址
192.168.201.128
192.168.201.130
192.168.201.131
(2)java 环境
(3) 使用的版本 zookeeper-3.4.10.tar.gz
3.在每一台机子上创建zookeeper目录(我是放在/opt目录 )
mkdir zookeeper #项目目录
然后进入到zookeeper 目录下创建
mkdir zkdata #存放快照日志
mkdir zkdatalog#存放事物日志
4.下载zookeeper到/opt/zookeeper目录下并解压
得到zookeeper-3.4.10目录
5. 修改配置文件
进入到解压好的目录里面的conf目录中,查看
复制其中的zoo_sample.cfg 文件并将其命名为zoo.cfg
注:zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,zoo.cfg是官方指定的文件命名规则。
使用vim 打开zoo.cfg,并修改为如下图所示配置
注:
#server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
#192.168.201.128为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888,然后我将这两个默认的端口改成12888 和13888
#修改dataDir 的值为刚才创建的zkdata目录,这是快照日志的存储路径
#修改dataLogDir 的值为刚才创建的zkdatalog目录,这是事物日志的存储路径
#clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。如2181端口已被使用,则修改他的端口 ,改为12181
在每一台服务器上的zkdata目录下创建无后缀名的 myid 文件,
并使用以下命令将serverid写入 myid 文件内
第一台服务器上执行
echo "1" > /opt/zookeeper/zkdata/myid (执行这行就可以将serverid写入 myid文件内)
第二台服务器上执行
echo "2" > /opt/zookeeper/zkdata/myid
第三台服务器上执行
echo "3" > /opt/zookeeper/zkdata/myid
6. 进入到Zookeeper的bin目录下,启动服务(3台都需要操作)
每台虚拟机都启动zookeeper服务之后,才能执行以下命令查看zookeeper的状态,出现以下信息则说明启动成功,否则会出现错误信息(需停掉防火墙)。
有三种状态
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
zookeeper集群一般只有一个leader,多个follower,leader一般是相应客户端的读写请求,而从主同步数据,当leader挂掉之后就会从follower里投票选举一个leader出来。
1、软件环境
1)、linux一台或多台,大于等于2
2)、已经搭建好的zookeeper集群
3)、软件版本kafka_2.11-1.0.1.tgz
2、创建目录并下载安装软件
#创建目录
cd /opt/
mkdir kafka #创建项目目录
cd kafka
mkdir kafkalogs #创建kafka消息目录,主要存放kafka消息
将kafka压缩包 放到 /opt/kakfa 目录中,解压软件
3、修改配置文件
进入到kafka_2.11-1.0.1/config目录,使用vim 修改server.properties (3台都需要修改)
设置日志文件路径
修改的配置项为:
broker.id=0 每台服务器的broker.id都不能相同 我这里 broker.id 是 0,1,20
#hostname
host.name=192.168.201.128 (对应这一台虚拟机的ip地址,这一项是需要添加进去的)
#设置zookeeper的连接端口
zookeeper.connect=192.168.201.128:12181,192.168.201.130:12181,192.168.201.131:12181(这里的ip地址及端口号是之前配置的zookeeper集群的ip地址及端口)
4、启动Kafka集群并测试
进入到kafka的bin目录(3台都需要操作)
./kafka-server-start.sh -daemon ../config/server.properties
执行启动 命令需要server.properties配置文件路径参数
-daemon 为隐藏信息 ,没有这个参数,屏幕会打印kafka启动日志(可能会卡在界面上)
启动后,可以使用jps命令查看服务是否启动 (需要配置java环境变量)
看到有Kafka,说明kafka启动成功,或者进入到 /opt/kafka/kafka_2.11-1.0.1/logs 目录下查看server.log 文件,如果出现报错信息,则启动失败,如果在启动过程的最后出现started 说明启动成功
测试
创建一个主题
./kafka-topics.sh --create --zookeeper 192.168.201.128:12181 --replication-factor 1 --partitions 1 --topic test
查看主题
./kafka-topics.sh --list --zookeeper 192.168.201.128:2181
发送消息
./kafka-console-producer.sh --broker-list 192.168.201.128:9092 --topic test
启动消费者接收消息
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
Java 代码可以参考官方的demo
http://kafka.apache.org/11/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html
这两个类
KafkaProducer
KafkaConsumer
5、配置kafka SSL
创建并进入 /opt/ssl 目录 ,然后执行以下命令
部署HTTPS的第一步是为集群中的每台计算机生成密钥和证书。
使用Java的keytool程序来实现。我们最初将密钥生成到临时密钥库中,以便稍后可以使用CA导出和签名。
(每台服务器上执行以下命令)
keytool -keystore kafka.server.keystore.jks -alias localhost -validity {validity} -genkey
keytool -keystore kafka.client.keystore.jks -alias localhost -validity {validity} -genkey
参数:
Keystore : 存储证书的密钥库文件。密钥库文件包含证书的私钥;
Validity : 以天为单位的证书有效时间。这里已经写了365天
First and last name 需要填写服务器的ip地址,比如我的是192.168.201.128
创建自己的CA(选择其中某一台服务器执行)
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
除了密码之外的信息可以不填
生成的CA只是一个公私密钥对和证书,并且用于签署其他证书。
将上述步骤生成的ca-cert ca-key这两个文件复制到另外两台服务器上的存放刚才密钥和证书的地方。
进入到/opt/ssl目录,将生成的CA添加到客户端的信任库,以便客户端可以信任此CA
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert
签署证书
首先,需要从密钥库中导出证书:
keytool -keystore kafka.server.keystore.jks -alias localhost -certreq -file cert-file
然后在CA上签名:
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial -passin pass:961128
365是有效天数,961128 是创建ca的时候的密码
最后,需要将CA的证书和签名证书导入密钥库:
keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore kafka.server.keystore.jks -alias localhost -import -file cert-signed
配置config/server.properties 文件
每台服务器上在server.properties文件中都添加如下配置 ,配置在如下位置:
listeners=SSL://192.168.201.130:9093(这个ip地址分别改为每台服务器的地址)
advertised.listeners=SSL://192.168.201.130:9093(这个ip也是)
ssl.keystore.location=/opt/ssl/kafka.server.keystore.jks (这是存放)
ssl.keystore.password=961128
ssl.key.password=961128
ssl.truststore.location=/opt/ssl/kafka.server.truststore.jks
ssl.truststore.password=961128
ssl.client.auth=required
ssl.keystore.type=JKS
ssl.truststore.type=JKS
security.inter.broker.protocol = SSL
要验证服务器的密钥库和信任库是否安装正确,可以运行以下命令:
openssl s_client -debug -connect localhost:9093 -tls1
localhost 改为本服务器ip地址
应该出现类似下面的输出
配置完成后,可进行如下测试
1.创建一个主题,看到提示Created **** ,说明创建成功
./kafka-topics.sh --create –-zookeeper 192.168.201.128:12181,192.168.201.130:12181,192.168.201.131:12181 --replication-factor 1 --partitions 1 --topic bbb
2.在当前/bin文件夹下创建producer.properties,用于在命令行中测试ssl机制(3台服务器都需要)
3. 在其中一台服务器上使用kafka提供的producer命令测试生产消息
./kafka-console-producer.sh --broker-list 192.168.201.128:9093,192.168.201.130:9093,192.168.201.131:9093 --topic bbb --producer.config producer.properties
4. 在另外两台服务上使用如下命令测试能否消费信息
./kafka-console-consumer.sh --bootstrap-server 192.168.201.128:9093,192.168.201.130:9093,192.168.201.131:9093 --topic bbb --consumer.config producer.properties
5.能生产消息,以及消费消息,说明SSL配置成功