概述
Apache基金会顶级开源项目众多、数不胜数,大多数开源项目都很优秀,代码质量也很高。阅读学习这些优秀项目源码、掌握他们的设计目的和编程技巧,能够帮助我们提升自己技术水平。实际业务项目开发中,完全可以借鉴源码中的内容。Apache Kafka属于当前主流中间件,源码涉及很多实用的底层技术栈:并发、网络、文件存储、多线程。本文主要以IDEA本地调试Kafka为切入点,开启研究剖析Kafka源码的专栏。
版本信息
| Zookeeper | 3.5.9 |
| Kafka | 2.7.1 |
ZookeeperMain方法
Zookeeper启动脚本,源码路径:zookeeper\bin\zkServer.sh
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE"-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \"-Dzookeeper.log.file=${ZOO_LOG_FILE}""-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemoryError='kill -9 %p' \-cp "$CLASSPATH" $JVMFLAGS$ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < dev/null &
ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain"JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain"
即,主类为:org.apache.zookeeper.server.quorum.QuorumPeerMain
Zookeeper配置&启动
配置Main class:
org.apache.zookeeper.server.quorum.QuorumPeerMain
配置VM options:
-Dlog4j.configuration=file:D:\ideaProject\zookeeper\conf\log4j.properties
配置Program arguments:
D:\ideaProject\zookeeper\conf\zoo_sample.cfg
配置结果如图:

启动结果如图:

KafkaServer Main方法
Server启动脚本,源码路径见:kafka\bin\kafka-server-start.sh
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
即,主类为:kafka.Kafka
KafkaServer配置&启动
配置结果如图:

启动结果如图:

Kafka TopicCommand Main方法
TopicCommand源码路径:kafka\bin\kafka-topics.sh
exec $(dirname $0)/kafka-run-class.sh kafka.admin.TopicCommand "$@"
即,主类为:kafka.admin.TopicCommand
配置结果如图:

Kafka ConsoleProducer Main方法
ConsoleProducer源码路径:kafka\bin\kafka-console-producer.sh
exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleProducer "$@"
即主类为:kafka.tools.ConsoleProducer
配置结果如图:

执行结果如图:

Kafka ConsoleConsumer Main方法
ConsoleConsumer源码路径:kafka\bin\kafka-console-consumer.sh
exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleConsumer "$@"
即主类为:kafka.tools.ConsoleConsumer
配置结果如图:

执行结果如图:

至此,IDAE调试Kafka源码演示完成,当然也可以调试其他类,如GetOffsetShell等等!!




