热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一、zookeeper源码阅读建议

我使用集成环境idea来阅读源码,不管是eclipse还是idea下面的方法都适用。1.从github上把源码clone下来。2.进入主目录,使用ant

我使用集成环境idea来阅读源码,不管是eclipse还是idea下面的方法都适用。
1. 从github上把源码clone下来。
2. 进入主目录,使用ant eclipse命令来编译工程。(ant需要提前安装)
3. 将工程导入idea。

然后就可以阅读源码了。
对于源码的阅读下面是我的几个心得,写出来分享下:
1. 在阅读zookeeper源码之前,最好还是先了解下zookeeper的应用场景和客户端的基本用法,这样不至于在阅读源码的时候一头雾水。
2. zookeeper是由客户端和服务端两部分组成,服务端又分为单机版和集群版两种(当然是一份代码)。客户端比较简单,而且调试服务端的时候需要客户端发出请求来配合,所以首先推荐阅读客户端的代码。服务端的集群版比较繁琐,如果有志于对zookeeper源码有较深的了解,对于服务端可以先阅读单机版的代码(单机版和集群版共用了很多代码),单机版包括会话、事务日志、快照、责任链、数据库、客户端通信等一些知识点。单机版单机版了解之后,集群版只是在单机版基础上多了leader选举和集群间通信两部分。
3. 阅读源码的正确方式:让项目跑起来,打日志调试。之所以如此是因为开源项目一般都比较大,如果干巴巴地去阅读的话可能会遇到各种坑而浪费很多时间。所以建议把项目实际部署起来,通过添加log的方式阅读源码,这样会事半功倍。

下面分享下windows下面zookeeper部署调试方式:
首先是zookeeper的单机版:
1. 首先构建整个工程,在根目录下使用ant命令。当出现Build Success,说明构建成功。
2. 将conf文件夹中的zoo_sample.cfg拷贝一份,重命名为zoo.cfg。打开zoo.cfg,将dataDir改为dataDir=D:/zk/data(我的zookeeper工程放在了D:\zk目录下面,windows中目录间分隔用斜杠,不要用反斜杠)
3. 然后就可以启动bin/zkServer.cmd脚本,这时候你会发现工程启动了,但是控制台没有期望的日志输出。这是因为zookeeper没有找到Log4j的jar包,你可以看看build/lib目录下有没有log4j的jar包,如果没有的话你要把需要的jar包拷贝到本目录下面来,在启动脚本,就可以看到控制台日志输出了。
4. 在需要的地方打上log输出,然后ant重新构建下,再启动服务端,就能看到输出的日志了。

zookeeper的集群版调试:
本集群由三台zookeeper服务器组成。
1. 对于构建成功的一个项目,把它拷贝两份,最终目录如下:
这里写图片描述
2. 在D:/zk/data下面创建三个目录data1,data2,和data3,并在这三个目录下面分别建一个myid文件,分别对应写入1,2,3。
3. 将zookeeper-1/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data1,并在文件末尾追加:
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zookeeper-2和zookeeper-3改动如下:
3.1. zookeeper-2/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data2
zookeeper-3/conf/zoo.cfg中的dataDir改为dataDir=D:/zk/data/data3
3.2. zookeeper-2/conf/zoo.cfg中的clientPort改为2182
zookeeper-2/conf/zoo.cfg中的clientPort改为2183
3.3. zookeeper-2和zookeeper-3都在zoo.cfg后追加上面的代码块。
4. 在需要的地方打上log输出,然后ant重新构建下,再启动服务端,就能看到输出的日志了。

最后介绍客户端的调试方式:
客户端最容易了,首先启动服务端(无论是单机版还是集群版都可以,服务端的模式对客户端透明)。我的项目目录如下所示:
这里写图片描述
其中main里面是客户端和服务端的代码,test也是源码目录,服务端的调试可以在test目录下新建一个类作为入口:
这里写图片描述
直接去Zookeeper这个类里面打断点,debug就可以了。


推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • 如何实现canal数据同步
    Canal简介与安装Canal简介Canal是阿里巴巴开发的MySQLbinlog增量订阅&消费组件。Canal是基于MySQL二进制日志的高性能数据同步系统。Canal在阿 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Mac系统中安装Hexo时,如果遇到“Error: Cannot find module './build/Release/DTraceProviderBindings’”错误,可以通过以下步骤解决:首先确保已正确安装Node.js和npm,然后尝试运行`npm install hexo --no-optional`。若问题依然存在,建议检查环境变量配置,并参考Hexo官方文档进行进一步排查。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
author-avatar
君君6789_903
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有