大师拷贝---kafka和zookeeper结合搭建系统

一、参考

二、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

二、java jdk安装配置
(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=.: J A V A H O M E / l i b : {JAVA_HOME}/lib: JAVAHOME/lib:{JRE_HOME}/lib

export PATH= J A V A H O M E / b i n : {JAVA_HOME}/bin: JAVAHOME/bin:PATH

4.      使 /etc/profile文件生效

5.      查看配置是否成功出现这个信息,说明配置成功

三、Zookeeper安装配置
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目录

  1. 修改配置文件

进入到解压好的目录里面的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

  1. 进入到Zookeeper的bin目录下,启动服务(3台都需要操作)

每台虚拟机都启动zookeeper服务之后,才能执行以下命令查看zookeeper的状态,出现以下信息则说明启动成功,否则会出现错误信息(需停掉防火墙)。

有三种状态

LOOKING:当前Server不知道leader是谁,正在搜寻

LEADING:当前Server即为选举出来的leader

FOLLOWING:leader已经选举出来,当前Server与之同步

zookeeper集群一般只有一个leader,多个follower,leader一般是相应客户端的读写请求,而从主同步数据,当leader挂掉之后就会从follower里投票选举一个leader出来。

四、Kafka集群搭建
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配置成功

作者:周雄伟
来源:CSDN
原文:https://blog.csdn.net/ebzxw/article/details/81512117
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(微服务,kafka,zookeeper)