簡體   English   中英

啟動kafka時輸入行太長

[英]The input line is too long when starting kafka

我正在嘗試在 Windows 上運行 Kafka 消息隊列。

我正在使用本教程 - https://dzone.com/articles/running-apache-kafka-on-windows-os

當我嘗試使用命令運行它時 -.\bin\windows\kafka-server-start.bat.\config\server.properties

我得到一個錯誤:輸入行太長。 命令的語法不正確。

卡夫卡位置 - C:\kafka_2.11-1.0.0

這是因為文件夾名稱“kafka_2.11-1.0.0”導致路徑長度過長。 只需將文件夾重命名為較小的名稱,例如“kafka”。

問題

kafka-run-class.bat文件執行了一堆 CLASSPATH :concat 調用,這使得 CLASSPATH 很長。

根據您的環境,過長:Windows cmd.exe 環境限制為 8191 個字符。

解決方案

編輯kafka-run-class.bat以便...

  1. 使其不使用 CLASSPATH 或在其他地方設置
  2. 使路徑更短,以便 concat 生成小於 8191 個字符的字符串
  3. 使 concat 使用整個文件夾而不是每個 jar(通過libs/*

例子

這是使用第二種方法編輯kafka-run-class.bat ( source ) 的示例:

代替 ...

rem Classpath addition for release
for %%i in ("%BASE_DIR%\libs\*") do (
    call :concat "%%i"
)

... 這樣 ...

rem Classpath addition for release
call :concat "%BASE_DIR%\libs\*;"

只需將 Kafka 路徑移動到更小的根路徑即可解決問題。 例如“C:\Kafka”

以上兩個選項都不適合我。

我剛剛將解壓縮的目錄移動到 C:/ 驅動器並以管理員模式啟動 power shell 並嘗試了所需的命令,zookeeper 和代理啟動順利。

我已將所有內容復制到 C:/tools/kafka 並且工作正常。 問題確實是通往卡夫卡的道路太長了。

對我來說,它只有在將 Kafka 文件夾保留在 C 目錄下之后才有效,因此路徑看起來像 C:\Kafka。 我相信這會奏效。

Windows 命令行存在長命令執行問題。 請改用 Powershell。

將所有文件放在其他驅動器中,例如 D: 或 E: 並運行命令

將 kafka 放在靠近驅動器根目錄的位置,這樣到它的路徑就很短。

當您運行包含在 windows 目錄中的那些 Kafka 批處理文件時,它們會與您的環境變量(類路徑之一)混在一起,並且可以創建一個很長的輸入行來實際運行命令/jar。

同樣正如其他人指出的那樣,確保您下載了二進制文件(是的,即使在 Kafka 站點上它被稱為 Scala 二進制文件,並且在任何地方都沒有提到 Windows,這可能會使人們感到困惑),而不是源代碼。 外行用戶也感到困惑,源代碼分發在未壓縮時看起來類似於二進制分發,例如它具有所有批處理文件,但它們不會運行。

啟動kafka時輸入行太長

我嘗試了下面的命令,但給了我同樣的錯誤

C:\kafka>.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

發生這種情況是因為當我們在同一個 cmd 上連續執行相同的命令時,路徑會附加到類路徑中。

關閉命令提示符並再次打開,然后啟動 Zookeeper 服務器。

對於 Windows,只需保持 Kafka 文件夾路徑短例如 - D/dev/kafka/bin/windows

關閉 Zookeeper 和 Kafka cmd 窗口並重新打開它對我有用。 我嘗試了上面的所有選項,除了 powershell。

將 kafka 文件夾重命名為一些較短的名稱,例如 kafka2。 打開一個新的命令提示符(不要使用現有/打開的命令提示符)

我嘗試提取下載的 Kafka zip 文件聯系人

C:\Kafka and ran the Kafka-server-start.bat

從命令提示符(不要以管理員身份運行命令提示符)並且有效。

以管理員身份運行命令提示符對我來說是個問題。

如果有的話,刪除kafka_2.13-2.5.0並保持文件夾名稱盡可能簡單,如Kafka ,還要確保路徑中沒有空格。

一個工作示例:文件夾位於C:\kafka
一個不工作的例子:文件夾位於C:\kafka 2\

我也有這個問題。 調試 bat 文件,您可以看到,在調用返回此錯誤的命令並使用相對路徑調用它之前更改目錄不會影響結果! 問題是 CLASSPATH 變量。 對我來說更短的最簡單方法是使用以下命令:

subst K: <absolute-long-path-to-kafka-dir-with-version>

這樣我就可以更改為這個虛擬驅動器cd /d K:並毫無問題地執行腳本:

K:\bin\windows\kafka-server-start.bat K:\config\server.properties

我編寫了一個包裝腳本,在再次執行之前刪除了 CLASSPATH 變量,因為每次執行都會附加這些值(相同的 cmd.exe)。

set CLASSPATH=
cd /d K:
K:\bin\windows\kafka-server-start.bat K:\config\server.properties

我用勺子。 如下更改 ...bin\windows\kafka-run-class.bat (kudos Midiman) 為我修復了它:

@REM rem Classpath addition for kafka-core dependencies
@REM for %%i in ("%BASE_DIR%\core\build\dependant-libs-%SCALA_VERSION%\*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\core\build\dependant-libs-%SCALA_VERSION%\*"

@REM rem Classpath addition for kafka-examples
@REM for %%i in ("%BASE_DIR%\examples\build\libs\kafka-examples*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\examples\build\libs\*"

@REM rem Classpath addition for kafka-clients
@REM for %%i in ("%BASE_DIR%\clients\build\libs\kafka-clients*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\clients\build\libs\*"

@REM rem Classpath addition for kafka-streams
@REM for %%i in ("%BASE_DIR%\streams\build\libs\kafka-streams*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\streams\build\libs\*"

@REM rem Classpath addition for kafka-streams-examples
@REM for %%i in ("%BASE_DIR%\streams\examples\build\libs\kafka-streams-examples*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\streams\examples\build\libs\*"

@REM for %%i in ("%BASE_DIR%\streams\build\dependant-libs-%SCALA_VERSION%\rocksdb*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\streams\build\dependant-libs-%SCALA_VERSION%\*"

@REM rem Classpath addition for kafka tools
@REM for %%i in ("%BASE_DIR%\tools\build\libs\kafka-tools*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\tools\build\libs\*"

@REM for %%i in ("%BASE_DIR%\tools\build\dependant-libs-%SCALA_VERSION%\*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\tools\build\dependant-libs-%SCALA_VERSION%\*"

for %%p in (api runtime file json tools) do (
    @REM for %%i in ("%BASE_DIR%\connect\%%p\build\libs\connect-%%p*.jar") do (
    @REM    call :concat "%%i"
    @REM )
    call :concat "%BASE_DIR%\connect\%%p\build\libs\*"
    if exist "%BASE_DIR%\connect\%%p\build\dependant-libs\*" (
        call :concat "%BASE_DIR%\connect\%%p\build\dependant-libs\*"
    )
)

@REM rem Classpath addition for release
@REM for %%i in ("%BASE_DIR%\libs\*") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\libs\*"

@REM rem Classpath addition for core
@REM for %%i in ("%BASE_DIR%\core\build\libs\kafka_%SCALA_BINARY_VERSION%*.jar") do (
@REM    call :concat "%%i"
@REM )
call :concat "%BASE_DIR%\core\build\libs\*"

將 kafka_2.11-1.0.0 重命名為 kafka 並保存在 C 盤。 這對我有用。

請檢查您的文件的目錄路徑,它不應在您保存 Kafka 的目錄結構中包含任何“-”。 從 kafka_2.13-2.7.0 更改目錄的名稱 --> Kafka為我工作。

解決這個問題的另一個好方法是從 kafka 文件夾創建一個虛擬驅動器:

subst <drive:> path\to\folder

例子:

subst K: C:\Users\me\software\kafkax.x-x.x

然后你可以去 K: 驅動並運行 zookeeper 和 kafka 沒有問題。

cd K:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
.\bin\windows\kafka-server-start.bat .\config\server.properties

調試並發現問題。 執行命令echo %CLASSPATH%你會找到罪魁禍首:)

kafka\lib 目錄下的所有 jar 文件都在CLASSPATH中單獨設置。 所以錯誤被拋出為Input Line too long

修復:在環境變量中添加CLASSPATH變量,直到 kafka 基目錄。

Kafka 文件夾/目錄路徑長度需要減少。 使用短文件夾/目錄路徑,然后它應該開始工作。

以下步驟對我有用。

  1. 將 Kafka 文件夾移動到靠近根目錄的位置(如 C:\kafka)。
  2. 從環境變量中刪除不需要的路徑變量。

只需刪除文件夾名稱 (kafka) 中 kafka 之前的版本 (kafka_2.13-3.3.1),它就應該可以工作。

從 Powershell 窗口運行 common .\bin\windows\kafka-server-start.bat .\config\server.propertie,它在 Window 上運行沒有任何問題。

對於類似的錯誤,對於 zookeeper,我運行我從https://zookeeper.apache.org/doc/r3.6.2/zookeeperStarted.html下載的 zookeeper zkserver.cmd

使用較短的路徑來存儲 kafka,例如 E:/kafka。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM