我正试图在eclipse中设置kafka。我按照文档并安装了所需的插件并导入了项目。我正在尝试设置环境,以便我能够从eclipse运行kafka服务器并逐行调试。 我的最终目标是为卡夫卡做出贡献。要理解代码体系结构,我觉得需要能够逐行调试代码并查看后台会发生什么。我尝试读取kafka的启动脚本,它设置一些参数来实际调用相应的类。 例如在kafka-server-start.sh中 它设置(它设置的参数比我提到的多)
KAFKA_HEAP_OPTS = some value
KAFKA_LOG4J_OPTS = some value
EXTRA_ARGS="-name kafkaServer -loggc"
之后它正在调用
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
现在我进入这个脚本有一些循环,它们为类路径添加了一些值,例如(有多个for循环)
for cc_pkg in "api" "runtime" "file" "json" "tools"
do
for file in $base_dir/connect/${cc_pkg}/build/libs/connect-${cc_pkg}*.jar;
do
CLASSPATH=$CLASSPATH:$file
done
if [ -d "$base_dir/connect/${cc_pkg}/build/dependant-libs" ] ; then
CLASSPATH=$CLASSPATH:$base_dir/connect/${cc_pkg}/build/dependant-libs/*
fi
done
最后它是如何实际启动kafka服务器的
# Launch mode
if [ "x$DAEMON_MODE" = "xtrue" ]; then
nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
else
exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
fi
不确定如何在运行时告诉所有这些都是eclipse。 如果我将整个脚本文件放在这里,请告诉我。即使我能想到如何做到这一点我也可以试试。 我想我可以在参数窗口中传递这个参数,并且在调试配置中也有一个类路径选项卡,但是我应该在这个窗口中添加脚本中的所有路径吗?
答案 0 :(得分:1)
只需在参数中传递server.properties文件即可。您可以从运行配置窗口传递此信息,然后单击“应用”并运行/ debug。这应该让你去。您不必遍历所有参数并传递它们。如果你想传递那些参数,那么你必须得到Mathhias如何解释的参数。但是这些参数不是运行kafka所必需的。
但简单的解决方案是右键单击要运行的项目的主类。例如,如果我想运行kafka服务器,我将进入kafka主项目的核心项目
var regexStr = "/[[alf]-[ya]]/";
function (regexStr) {
regexStr = replace(regexStr,"[alf]","\u0600");
regexStr = replace(regexStr,"[ya]","\u06FF");
return regexStr;
}
右键单击此选择调试然后单击调试配置:在该窗口中传递server.properties文件的路径,然后单击“应用”。 您可以在找到启动脚本的tar中找到server.properties文件。
答案 1 :(得分:0)
首先,将Kafka脚本修改为echo
实际命令:
echo $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
之后,您需要在Eclipse中编辑运行配置:
$KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS
的内容并进入字段 JVM参数(在“Arguments”面板中)。CLASSPATH
是通过面板“Classpath”$@
应该包含被称为main
的实际类(可能程序参数,您可以在面板“Arguments”中设置)