kafka分布式部署与验证

kafka是一个分布式环境下的消息组件,如果kafka的应用进程被杀或者kafka的机器宕机,那么kafka消息组件就无法使用了。

kafka集群(cluster)

一台机器不够,那就多搞几台,首先,启动zookeeper这个就不多说了.可以参看前文,在启动kafka的时候,我们在单机模拟启动多个kafka应用.

首先在config目录,copy两个server.properties 文件,这里我复制三份,分别起名server1.properties
,server2.properties server3.properties

然后修改这三个配置文件,主要修改broker.id=2,port=9094,log.dir=/tmp/kafka-logs-2这三个值,broker.id是用来标记分布式环境中的broker的,要求唯一,port和log.dir一个端口,一个log目录,如果在真实的分布式环境中是不需要修改.这里单机模拟防止端口冲突.

分别把broker.id改为1,2,3,log.dir则分别改成kafka-logs-1,kafka-logs-2,kafka-logs-3,然后依次启动

kafka-server-start.bat ../../config/server1.properties

kafka-server-start.bat ../../config/server2.properties

kafka-server-start.bat ../../config/server3.properties

如果你启动有报错,一个就是之前说的那个vm参数太大,另一个可能是你的端口没改好.具体错误看下报错就好了.

然后我们注册一个topic,叫做replicationtest

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3
--partitions 1 --topic replicationtest

这里冗余是3,分区是1,那么最终各个broker都会保留一份,最多允许N-1,也就是2台broker宕机,服务照样运行.

注册之后,这时候

kafka-topics.bat--describe --zookeeper localhost:2181 --topic
replicationtest

执行描述命令,看下集群情况


集群描述结果

第一行给出了分区的汇总信息。每个分区行给出分区信息。

“Leader” 节点是2.

“Replicas” 信息,在节点2,3,1上,所有的节点信息.

“Isr” 工作中的复制节点的集合. 也就是活的节点的集合.

其他的就不用解释了.这里选出了2是leader,也就是说2这个节点会给消费者提供服务.

然后我们测试一条信息.

kafka-console-producer.bat --broker-list
localhost:7777,localhost:8888,localhost:9999 --topic replicationtest

上面的7777是server1.properties 中设置的.根据个人情况.改改.然后在控制台发发消息.

然后消费一下.

kafka-console-consumer.bat --zookeeper localhost:2181 --topic
replicationtest

这里的2181是zookeeper的端口,不用改.


目前运行结果

然后.我们开始关掉一个broker,在3的控制台里CTRL,C.然后是否终止操作,输入Y.

再发一条消息


broker3宕机

一切正常.我们看一下集群信息


broker3宕机集群

发现Isr中存活的机器少了3.因为3挂了.

然后我们关掉broker2.这时候,会触发新的leader选举.期望值1变成leader,再发一条消息


broker2宕机

可以看到生产者发消息过程中,产生了异常,因为和2的连接断开了.但是注意,消息并没有丢,因为触发了新的选举.可以看到,消费者还是接到了正常的消息.集群情况如下


broker2宕机集群

至此,kafka的broker集群测试完毕,那么剩下的问题来了.消费者启动的时候连接的是zookeeper的地址,如果这台zookeeper挂了呢.

那么我们需要zookeeper集群部署.

zookeeper集群

这就包括两部分.

是broker本来要能知道这些zookeeper集群的地址,当一个宕机的时候,才会切换到另一个zookeeper

消费者要知道这些zookeeper的地址,理由同上.

因此步骤如下.可以自己试一试,比较简单

复制3份zookeeper.properties文件,命名为
zookeeper1.properties,zookeeper2.properties,zookeeper3.properties,修改文件中的
dataDir=/tmp/zookeeper和,clientPort=2181,端口分别设置为2181,2182,2183.然后启动三个
zookeeper

修改kafka启动配置,server1.properties三个文件中的zookeeper.connect=localhost:2181
这个配置,逗号隔开.最终为
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183,然后启动

生产者也改下配置中的.metadata.broker.list=localhost:9092,如果使用命令行启动就不用改了.参数指定也可以.

消费者同理,可以改下配置文件中zookeeper.connect=127.0.0.1:2181,也可以命令行启动的时候修改.

5.最终就是各种宕机测试了.

时间: 2024-10-25 18:31:33

kafka分布式部署与验证的相关文章

Kafka分布式安装及验证测试

        一.安装         Kafka依赖于ZooKeeper,所以在安装Kafka之前请确保ZooKeeper集群已安装正确并能正常运行.虽然Kafka自身内置了ZooKeeper,但是还是建议大家单独部署ZooKeeper集群,因为可能其他框架也需要使用ZooKeeper.         (一).Kafka下载地址:http://mirrors.hust.edu.cn/apache/kafka/,你可以选择你需要的版本,如下:         我选择的是Kafka0.9.0.

应用服务器-关于tomcat集群配置和分布式部署

问题描述 关于tomcat集群配置和分布式部署 如题,我在阿里云上买了一个云服务器 A,8核16G 10M带宽,配置比较高了, 如果需要负载均衡.分布式部署,可不可以不重新买一台 云服务器 B 请问一下,可不可以 直接在这台 A 服务器上 安装 apache 服务器, 然后在A服务器上安装一个tomcat1服务器和一个tomcat1服务器, 修改端口,避免冲突,然后 修改各种配置 直至成功. 请问 能不能达到 集群 和 分布式的效果?简单来说,就是 分布式可不可以同时部署 在同一个机器上的不同端

联想企业网盘基于Docker构建分布式部署框架实践

本文讲的是联想企业网盘基于Docker构建分布式部署框架实践[编者的话]本文首先介绍了企业级分布式系统部署所面临的挑战,并且结合联想云存储自有框架研发经验分享了一些解决问题的思想和具体做法.最后还与Kubernetes项目进行了简单对比. 众所周知,企业网盘在这两年呈现爆发式增长,越来越多的企业选择企业网盘,来解决企业在业务过程中面临的数据集中存储.共享.分发.协同办公以及移动化等痛点需求.同时将企业网盘整合到各个业务系统中,大幅提高企业的数据流转效率和安全! 而联想企业网盘增长尤为迅速,仅联想

Apache Spark三种分布式部署方式比较

其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配).本文将介绍这三种部署方式,并比较其优缺点. standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统.从一定程度上说,该

OssImport系列之三——分布式部署

相关文章:OssImport系列之一--架构 下载 分布式部署目前只支持Linux,Windows暂不支持. 分布式版本下载地址 ossimport-2.2.1.tar.gz ,下载到本地后,使用命令 tar -zxvf ossimport-2.2.0.tar.gz -C $HOME/ossimport 解压,解压后的文件结构如下: ossimport ├── bin │   ├── console.jar # Console模块jar包 │   ├── master.jar # Master模

Memcache分布式部署方案

基础环境 其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定.先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的Memcache实际上是连接Memcache的方式. 首先,进行Memcache的安装,具体可查看博客里的其它几篇文章: 其次,进行PHP扩展的安装,官方地址是http://pecl.php.net/package/memcache: 最后,启动Memcache服务,比如这样,通过不同端口启动多个进程

脚本-新人求助属性!!!关于项目分布式部署

问题描述 新人求助属性!!!关于项目分布式部署 项目中有多个server,web端的请求通过分发派遣到各个server进行处理,而处理的时候需要根据请求使用不同JS脚本.此时能不能把这些将被调用的JS集中放置在一个server(称为A)中,当其他几个server有请求时,会发送一个约定好的东西来这个A中请求对应的JS文档. 请问我该怎么实现这个功能? 项目是基于SpringMVC的.在线等.... 解决方案 将server A部署起来,其它server直接饮用server A的js地址即可.比如

游戏云之游戏分布式部署架构方案

消除单点的分布式部署方案,登录服务器与游戏服务器多台部署,且对外提供同等服务,同时配置负载均衡进行流量分摊.对于突发流量,可利用云服务器(ECS)弹性扩展特性,增加更多云服务器,分摊流量.启用关系型数据库(RDS),兼容MySQL.SQL Server,大幅提高数据库性能. 游戏分布式部署架构解读 负载均衡 SLB)可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性.SLB底层为集群机制,吞吐量和稳定性远远高于自行部署的负载均衡软硬件,且只需要较低的成本投入. 登录

memcache分布式部署的原理分析

今天在封装memcache操作类库过程中,意识到一直以来对memcache的使用都是局限在单台服务器的情况下,还没有使用到memcache的分布式部署.虽然知道memcache的分布式是怎么回事,但是为了更加深入的理解,还是通过谷歌搜索了这方面的相关资料. 下面是精摘于网络的一些关于 memcache分布式部署 的资料. memcache分布式部署是什么呢?下面通过一个例子来认识一下: 假设memcached服务器有node1-node3三台, 应用程序要保存键名为"tokyo"&qu