壓縮包下載地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/3.6.1/kafka_2.13-3.6.1.tgz
啟動kafka步驟
zookeeper-server-start.bat
rem 閉命令提示符窗口的命令回顯,這樣在運行腳本時不會顯示腳本的具體命令內容
@echo offrem 命令行啟動未提供參數則輸出: USAGE:命令 zookeeper.properties 中止
IF [%1] EQU [] (echo USAGE: %0 zookeeper.propertiesEXIT /B 1
)
rem 開始了一個局部環境,只在當前腳本執行過程中有效
SetLocal
rem 未設置值,則設置
IF ["%KAFKA_LOG4J_OPTS%"] EQU [""] (set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%~dp0../../config/log4j.properties
)
IF ["%KAFKA_HEAP_OPTS%"] EQU [""] (set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M
)
rem %~dp0獲取命令的文件路徑,%* 讀取執行這個命令攜帶的鎖有參數
"%~dp0kafka-run-class.bat" org.apache.zookeeper.server.quorum.QuorumPeerMain %*rem 在腳本中限定變量的作用范圍,以防止對環境變量的更改影響到腳本之外的其他部分
EndLocal
kafka-run-class.bat
@echo offsetlocal enabledelayedexpansionIF [%1] EQU [] (echo USAGE: %0 classname [opts]EXIT /B 1
)rem Using pushd popd to set BASE_DIR to the absolute path
rem pushd表示切換目錄,這里作用是切換到%~dp0對應的上2級目錄
pushd %~dp0..\..
rem CD是系統變量,%CD%表示當前工作目錄的路徑
set BASE_DIR=%CD%
rem popd 切回原來的目錄
popdIF ["%SCALA_VERSION%"] EQU [""] (set SCALA_VERSION=2.13.11
)rem 延遲環境變量擴展后的一種變量訪問方式!var!
IF ["%SCALA_BINARY_VERSION%"] EQU [""] (for /f "tokens=1,2 delims=." %%a in ("%SCALA_VERSION%") do (set FIRST=%%aset SECOND=%%bif ["!SECOND!"] EQU [""] (set SCALA_BINARY_VERSION=!FIRST!) else (set SCALA_BINARY_VERSION=!FIRST!.!SECOND!))
)rem Classpath addition for kafka-core dependencies 為kafka核心依賴添加類路徑
rem for %%i in (...) do (...)這是一個 for 循環,用于遍歷指定路徑下滿足特定條件的文件
for %%i in ("%BASE_DIR%\core\build\dependant-libs-%SCALA_VERSION%\*.jar") do (rem call :concat "%%i"
)rem Classpath addition for kafka-examples
for %%i in ("%BASE_DIR%\examples\build\libs\kafka-examples*.jar") do (call :concat "%%i"
)rem Classpath addition for kafka-clients
for %%i in ("%BASE_DIR%\clients\build\libs\kafka-clients*.jar") do (call :concat "%%i"
)rem Classpath addition for kafka-streams
for %%i in ("%BASE_DIR%\streams\build\libs\kafka-streams*.jar") do (call :concat "%%i"
)rem Classpath addition for kafka-streams-examples
for %%i in ("%BASE_DIR%\streams\examples\build\libs\kafka-streams-examples*.jar") do (call :concat "%%i"
)for %%i in ("%BASE_DIR%\streams\build\dependant-libs-%SCALA_VERSION%\rocksdb*.jar") do (call :concat "%%i"
)rem Classpath addition for kafka tools 為kafka工具添加類路徑
for %%i in ("%BASE_DIR%\tools\build\libs\kafka-tools*.jar") do (call :concat "%%i"
)for %%i in ("%BASE_DIR%\tools\build\dependant-libs-%SCALA_VERSION%\*.jar") do (call :concat "%%i"
)
rem 兩層for循環
for %%p in (api runtime file json tools) do (for %%i in ("%BASE_DIR%\connect\%%p\build\libs\connect-%%p*.jar") do (call :concat "%%i")if exist "%BASE_DIR%\connect\%%p\build\dependant-libs\*" (call :concat "%BASE_DIR%\connect\%%p\build\dependant-libs\*")
)rem Classpath addition for release
for %%i in ("%BASE_DIR%\libs\*") do (call :concat "%%i"
)rem Classpath addition for core
for %%i in ("%BASE_DIR%\core\build\libs\kafka_%SCALA_BINARY_VERSION%*.jar") do (call :concat "%%i"
)rem JMX settings JMX的設置
IF ["%KAFKA_JMX_OPTS%"] EQU [""] (set KAFKA_JMX_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
)rem JMX port to use 使用的JMX端口
IF ["%JMX_PORT%"] NEQ [""] (set KAFKA_JMX_OPTS=%KAFKA_JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
)rem Log directory to use 要使用的日志目錄
IF ["%LOG_DIR%"] EQU [""] (set LOG_DIR=%BASE_DIR%/logs
)rem Log4j settings
IF ["%KAFKA_LOG4J_OPTS%"] EQU [""] (set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%BASE_DIR%/config/tools-log4j.properties
) ELSE (rem create logs directory 創建一個目錄文件夾IF not exist "%LOG_DIR%" (mkdir "%LOG_DIR%")
)set KAFKA_LOG4J_OPTS=-Dkafka.logs.dir="%LOG_DIR%" "%KAFKA_LOG4J_OPTS%"rem Generic jvm settings you want to add 要添加的通用jvm設置
IF ["%KAFKA_OPTS%"] EQU [""] (set KAFKA_OPTS=
)set DEFAULT_JAVA_DEBUG_PORT=5005
set DEFAULT_DEBUG_SUSPEND_FLAG=n
rem Set Debug options if enabled
IF ["%KAFKA_DEBUG%"] NEQ [""] (IF ["%JAVA_DEBUG_PORT%"] EQU [""] (set JAVA_DEBUG_PORT=%DEFAULT_JAVA_DEBUG_PORT%)IF ["%DEBUG_SUSPEND_FLAG%"] EQU [""] (set DEBUG_SUSPEND_FLAG=%DEFAULT_DEBUG_SUSPEND_FLAG%)set DEFAULT_JAVA_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=!DEBUG_SUSPEND_FLAG!,address=!JAVA_DEBUG_PORT!IF ["%JAVA_DEBUG_OPTS%"] EQU [""] (set JAVA_DEBUG_OPTS=!DEFAULT_JAVA_DEBUG_OPTS!)echo Enabling Java debug options: !JAVA_DEBUG_OPTS!set KAFKA_OPTS=!JAVA_DEBUG_OPTS! !KAFKA_OPTS!
)rem Which java to use
IF ["%JAVA_HOME%"] EQU [""] (set JAVA=java
) ELSE (set JAVA="%JAVA_HOME%/bin/java"
)rem Memory options
IF ["%KAFKA_HEAP_OPTS%"] EQU [""] (set KAFKA_HEAP_OPTS=-Xmx256M
)rem JVM performance options
IF ["%KAFKA_JVM_PERFORMANCE_OPTS%"] EQU [""] (set KAFKA_JVM_PERFORMANCE_OPTS=-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
)IF not defined CLASSPATH (echo Classpath is empty. Please build the project first e.g. by running 'gradlew jarAll'EXIT /B 2
)
rem %?% 讀取環境變量
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*
rem echo.
rem echo %COMMAND%
rem echo.
%COMMAND%rem 將控制權轉移到腳本的文件尾
goto :eof
:concat
rem 這是一個條件語句,用于檢查CLASSPATH環境變量是否已定義
IF not defined CLASSPATH (set CLASSPATH="%~1"
) ELSE (set CLASSPATH=%CLASSPATH%;"%~1"
)
啟動失敗日志
缺少啟動參數
輸入行太長
組合起來的執行命令太長,Windows系統不支持。將項目放到盤符目錄下。
找不到類
為了解決路徑太長,去掉了一級目錄。因為啟動命令中有通過當前命令的位置去加載jar包。
絕對路徑配置文件加載報錯
# 文件地址錯誤
/kafka_2.13-3.6.1/bin/windows/zookeeper-server-start.bat /kafka_2.13-3.6.1/config/zookeeper.properties
先對路徑無法啟動
./bin/windows/zookeeper-server-start.bat ./bin/windows/zookeeper.properties/bin/windows/zookeeper-server-start.bat /bin/windows/zookeeper.propertiesbin/windows/zookeeper-server-start.bat bin/windows/zookeeper.properties
啟動成功
1. 啟動zookeeper
# 當前路徑下啟動
zookeeper-server-start.bat ../../config/zookeeper.properties# 將文件復制一份到啟動命令處
zookeeper-server-start.bat zookeeper.properties# 絕對路徑啟動
/kafka_2.13-3.6.1/bin/windows/zookeeper-server-start.bat /kafka_2.13-3.6.1/bin/windows/zookeeper.properties/kafka_2.13-3.6.1/bin/windows/zookeeper-server-start.bat /kafka_2.13-3.6.1/config/zookeeper.properties# Window使用相對路徑 系統找不到指定的路徑
/bin/windows/zookeeper-server-start.bat /bin/config/zookeeper.properties/kafka_2.13-3.6.1/bin/windows/zookeeper-server-start.bat /kafka_2.13-3.6.1/bin/config/zookeeper.properties# 相對路徑啟動
call ./bin/windows/zookeeper-server-start.bat ./config/zookeeper.propertiescall ./bin/windows/zookeeper-server-start.bat ./bin/windows/zookeeper.properties
ctrl + C停止,或者關閉窗口
3.啟動kafka-server
# 當前路徑下啟動 將文件復制一份到啟動命令處
kafka-server-start.sh config/server.properties# 其他方式啟動同上