首页 > 云计算 > 开源云工具 > 滴滴云部署 ZooKeeper + Kafka
Kafka 是一种分布式的流处理平台,流处理平台有以下三个特点:
1. 发布和订阅流记录,类似于消息队列和企业消息系统。
2. 流记录的存储具有容错性。
3. 实时处理流记录。
Kafka 广泛应用于以下两方面:
1. 为系统和应用之间的数据可靠传输建立实时的流式数据通道。
2. 为传输或响应数据流建立实时的流式应用。
Kafka 以集群的方式运行在一台或跨机房的多台服务器上,储存在 Kafka 集群上的流记录用不同的 topic 进行分类,每一条记录包含一个 key(键),一个 value(值)和一个 timestamp(时间戳)。
ZooKeeper 是一个针对大型分布式系统的可靠的协调系统,提供的功能包括命名服务、配置维护、分布式同步、组服务等。ZooKeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题。
本文中 Kafka 正是利用了 ZooKeeper 的协调作用,管理、协调 Kafka 实例(broker)。每个 Kafka 实例都通过 ZooKeeper 协调其它 Kafka 实例。
当 Kafka 系统中新增了实例或者某个代理故障失效时,ZooKeeper 服务将通知消息记录的生产者和消费者。生产者和消费者据此开始与其它实例协调工作。
此处我们使用的是 滴滴云 主机内网 IP,在本文的 Java 示例需要外部访问 Kafka,需要绑定公网 IP 即 EIP。有关 滴滴云 EIP 的使用请参考以下链:https://help.didiyun.com/hc/kb/section/1035272/
以下操作在三台节点进行。
登录
滴滴云
虚拟主机 DC2,
滴滴云
DC2 默认登陆用户 dc2-user,本文部署过程将使用 root,输入 sudo su 命令切换到 root用户,进入 /usr/local 文件夹下载 ZooKeeper 和 JDK。
解压 JDK 并配置 Java 环境变量:
tar zxvf jdk - 8u191 - linux - x64 . tar . gz
在 /etc/profile 文件末尾添加以下内容:
使环境变量生效:
source / etc / profile
输入 java -version,如果看到以下输出说明 Java 环境变量配置成功:
安装配置 ZooKeeper:
创建配置文件中的 dataDir 目录和 myid 文件:
将三台节点的主机名与 IP 映射添加到 /etc/hosts 文件中:
分别在三台节点启动 ZooKeeper:
/ usr / local / zookeeper - 3.4.12 / bin / zkServer . sh start
查看 ZooKeeper 是否启动成功:
在三台节点分别查看 ZooKeeper 角色,一个 leader 两个 follower:
关于 ZooKeeper 的选举机制可以参考以下链接:https://zookeeper.apache.org/doc/current/recipes.html#sc_leaderElection
至此 ZooKeeper 启动成功。
本例使用两个节点部署 Kafka,在 zk101 和 zk102 解压 Kafka:
编辑 server.properties:
zk102 的配置文件更改相应 IP 即可。
在 zk101 和 zk102 上启动 Kafka:
以 zk101 作为 producer,创建 topic:
/ usr / local / kafka_2 . 12 - 0.10.2.1 / bin / kafka - topics . sh -- create -- zookeeper zk101 : 2181 -- replication - factor 2 -- partitions 1 -- topic test
Created topic "test" .
同样在 zk101 上创建一个生产者:
/ usr / local / kafka_2 . 12 - 0.10.2.1 / bin / kafka - console - producer . sh -- broker - list zk101 : 9092 -- topic test
在 zk102 上创建一个消费者:
/ usr / local / kafka_2 . 12 - 0.10.2.1 / bin / kafka - console - consumer . sh -- zookeeper zk102 : 2181 -- topic test -- from - beginning
在 zk101 上输入内容,可以在 zk102 上看到:
下面的 Java 测试代码中会用到 zk101 节点的 EIP 和对应的 9092 端口,因此要在安全组中打开 9092 端口,有关安全组的使用请参照以下链接:https://help.didiyun.com/hc/kb/article/1091031/
创建 mave 项目,编辑 pom.xml,解决依赖:
生产者代码 ProducerTest.java:
消费者代码 Consumer.java:
先运行 Consumer:
运行 ProducerTest,发送消息:
在 Consumer 上可以收到消息:
参考链接:
https://www.cnblogs.com/skying555/p/7873345.html
https://kafka.apache.org/intro
https://zookeeper.apache.org/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31559758/viewspace-2222545/ ,如需转载,请注明出处,否则将追究法律责任。