zkclient

使用Zookeeper实现负载均衡轮询例子

≯℡__Kan透↙ 提交于 2020-02-09 13:37:30
1.原理 ​ 使用Zookeeper实现负载均衡原理,服务器端将启动的服务注册到,zk注册中心上,采用临时节点。客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算法,随机分配服务器。 2.实例代码相关 Maven依赖: <dependencies> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> </dependencies> ZkServerScoekt: public class ZkServerScoekt implements Runnable { private static int port = 18081; public static void main(String[] args) throws IOException { ZkServerScoekt server = new ZkServerScoekt(port);

分布式全局唯一ID与自增序列

醉酒当歌 提交于 2019-12-09 23:52:55
包含时间顺序的ID 此场景最简单的实现方案,就是采用 twitter 的 Snowflake 算法。 ID总长64位,第1位不可用,41位表示时间戳,10位表示生成机器的id,后12位表示序列号。 为什么第一位不可用?第一位为0,可以确保ID在java的long类型数据一直为正整数递增 同一时间戳即毫秒内,能产生多少个ID? 2^12 = 4096 个ID [ 0 ~ 4095 ] 唯一性?通过机器ID预先已经做了一次空间隔离,再通过时间戳做了一次时间隔离,最后通过时间戳内的计数实现了一定程度内的唯一 高性能?可以通过增加IDWorker来缓解高并发时的单机负载压力 缺点?时间受限,41位可以表示69年(不过可以减少机器位来增加时间位数) 自增序列 原理 根据key获取分布式锁,获得锁后取得序号,并偏移配置的偏移量,替换原先的序号,最后释放锁。 基于zookeeper实现 基于zookeeper可以很快实现自增序列服务,引入apache的curator封装的zookeeper客户端。 1234 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId></dependency> 建立zookeeper连接,打开zkclient后,如果重复会使用

ZooKeeper分布式锁简单实践

拟墨画扇 提交于 2019-12-07 17:39:08
ZooKeeper分布式锁的实现原理 在分布式解决方案中,Zookeeper是一个分布式协调工具。当多个JVM客户端,同时在ZooKeeper上创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁能够创建节点成功,谁就能够获取到锁。没有创建成功节点,就会进行等待,当释放锁的时候,采用事件通知给客户端重新获取锁资源。如果请求超时直接返回给客户端超时,重新请求即可。 代码实现 为了更好的展现效果,我这里设置每个线程请求需要1s,请求超时时间为30s。 首先我们先写一个测试类,模拟多线程多客户端请求的情况: public class ZkLockTest implements Runnable { private ZkLock zkLock = new ZkDistributedLock(); public void run() { try { if (zkLock.getLock((long)30000,null)) { System.out.println("线程:" + Thread.currentThread().getName() + ",抢购成功:" + System.currentTimeMillis()); } else { System.out.println("线程:" + Thread.currentThread().getName() + "

把dubbo-admin.war包放在Tomcat中,报INFO zkclient.ZkEventThread - Starting ZkClient

给你一囗甜甜゛ 提交于 2019-12-06 14:14:51
将dubbo-admin.war包放在Tomcat中,启动Tomcat卡在这里不动!!!! 1、检查zookeeper是否启动,即进入zookeeper/bin目录输入./zkServer.sh start 2、zookeeper/conf/zoo.cfg文件中的dataDir是否配置为正确的地址 3、检查zookeeper安装所在系统的ip和dubbo-admin/WEB-INF中的dubbo.properties中的dubbo.registry.address=zookeeper:所配置的IP是否相同 4、其他检查从jdk-->tomcat-->端口占用依次检测 关于Tomcat的配置可以参考http://blog.csdn.net/wlwlwlwl015/article/details/51210347 5、最后重启tomcat服务 进入tomcat的bin目录,执行:./startup.sh start 此时,tomcat重新启动,进入logs文件夹,查看tomcat日志 tail -f catalina.out 6、服务启动之后,登录网址: http://192.168.19.3:8080/dubbo-admin/ 输入用户名和密码均为root 如何查看Tomcat进程 ps -aux | grep tomcat 查看8080端口 ps -aux | grep

把dubbo-admin.war包放在Tomcat中,报INFO zkclient.ZkEventThread

房东的猫 提交于 2019-12-06 09:39:54
将dubbo-admin.war包放在Tomcat中,tomcat卡在这里不动,查看tomcat日志报这个错误: 错误排查: 1、检查zookeeper是否启动,即进入zookeeper/bin目录输入./zkServer.sh start 2、zookeeper/conf/zoo.cfg文件中的dataDir是否配置为正确的地址 3、检查zookeeper安装所在系统的ip和dubbo-admin/WEB-INF中的dubbo.properties中的dubbo.registry.address=zookeeper:所配置的IP是否相同 4、其他检查从jdk-->tomcat-->端口占用依次检测 关于Tomcat的配置可以参考http://blog.csdn.net/wlwlwlwl015/article/details/51210347 5、最后重启tomcat服务 进入tomcat的bin目录,执行:./startup.sh start 此时,tomcat重新启动,进入logs文件夹,查看tomcat日志 tail -f catalina.out 6、服务启动之后,登录网址: http://192.168.19.3:8080/dubbo-admin/ 输入用户名和密码均为root 如何查看Tomcat进程 ps -aux | grep tomcat 查看8080端口 ps

Zookeeper

China☆狼群 提交于 2019-12-05 18:04:16
概述 Zookeeper字面上理解就是动物管理员,是大数据框架Hadoop生态圈中的一个服务中间件,Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”。他负责分布式应用程序协调的工作。 Hadoop框架 Zookeeper主要提供以下四点功能: 统一命名服务、配置管理、集群管理、共享锁和队列管理 ,用于高效的管理集群的运行。 Zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。 Zookeeper 部署有三种方式,单机模式、集群模式、伪集群模式,以下采用Docker 的方式部署 注意: 集群为大于等于3个奇数,如 3、5、7,不宜太多,集群机器多了选举和数据同步耗时长,不稳定。 zk安装 docker-compose-yml version: '3.1' services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 配置说明 2181:客户端连接 Zookeeper 集群使用的监听端口号 3888:选举 leader 使用 2888:集群内机器通讯使用(Leader 和

Dubbo(二):zookeeper 注册中心

一世执手 提交于 2019-12-04 01:19:28
zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 [1]。 流程说明: 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。 支持以下功能: 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息 当注册中心重启时,能自动恢复注册数据,以及订阅请求 当会话过期时,能自动恢复注册数据,以及订阅请求 当设置 时,记录失败注册和订阅请求,后台定时重试 可通过 设置 zookeeper 登录信息 可通过 设置 zookeeper 的根节点,不配置将使用默认的根节点。 支持 * 号通配符 ,可订阅服务的所有分组和所有版本的提供者 使用 在 provider 和 consumer 中增加 zookeeper

Dubbo分析之Registry层

大憨熊 提交于 2019-12-03 20:08:52
系列文章 Dubbo分析Serialize层 Dubbo分析之Transport层 Dubbo分析之Exchange 层 Dubbo分析之Protocol层 Dubbo分析之Cluster层 Dubbo分析之Registry层 前言 紧接上文 Dubbo分析之Cluster层 ,本文继续分析dubbo的register层;此层封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory, Registry, RegistryService; Registry接口 接口定义如下: public interface Registry extends Node, RegistryService { } public interface RegistryService { void register(URL url); void unregister(URL url); void subscribe(URL url, NotifyListener listener); void unsubscribe(URL url, NotifyListener listener); List<URL> lookup(URL url); } 主要提供了注册(register),注销(unregister),订阅(subscribe),退订(unsubscribe)等功能

Rebalancing issue while reading messages in Kafka

匿名 (未验证) 提交于 2019-12-03 01:31:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I am trying to read messages on Kafka topic, but I am unable to read it. The process gets killed after sometime, without reading any messages. Here is the rebalancing error which I get: [ 2014 - 03 - 21 10 : 10 : 53 , 215 ] ERROR Error processing message , stopping consumer : ( kafka . consumer . ConsoleConsumer$ ) kafka . common . ConsumerRebalanceFailedException : topic - 1395414642817 - 47bb4df2 can 't rebalance after 4 retries at kafka.consumer.ZookeeperConsumerConnector$ZKRebalancerListener.syncedRebalance