启动kafka时输入行太长

Posted

技术标签:

【中文标题】启动kafka时输入行太长【英文标题】:The input line is too long when starting kafka 【发布时间】:2018-07-27 20:15:36 【问题描述】:

我正在尝试在 Windows 上运行 Kafka 消息队列。

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

当我尝试使用命令运行它时 - .\bin\windows\kafka-server-start.bat .\config\server.properties

我得到一个错误: 输入行太长。 该命令的语法不正确。

kafka 位置 - C:\kafka_2.11-1.0.0

【问题讨论】:

你可以在这里找到更多细节reachmnadeem.wordpress.com/2020/08/30/… 【参考方案1】:

这是因为文件夹名称“kafka_2.11-1.0.0”导致路径长度过长。只需将文件夹重命名为小名称,例如“kafka”。

【讨论】:

然后重新启动 CMD 并运行命令即可。在之前的 CMD 中,我发现 %CLASSPATH% 包含的路径太多。 为我工作!!谢谢。 工作就像一个魅力!谢谢 @niaomingjian 谢谢。我的 CMD 的类路径被 zookeeper 服务器占用。现在我正在使用 PowerShell 启动 kafka 服务器。 重命名为更短的名称有效,或者更确切地说它恰好有效,因为 Windows(更好,cmd.exe)的命令行长度限制为 8191 个字符,如 here 所述【参考方案2】:

Windows 命令行存在长命令执行问题。 请改用 Powershell。

【讨论】:

Powershell 也没有解决我的问题。它与here as cmd.exe 具有相同的 8191 个字符限制。【参考方案3】:

以上两个选项都不适合我。

我刚刚将解压后的目录移动到 C:/ 盘并以 Administrator 模式启动 power shell 并尝试了所需的命令,zookeeper 和 broker 顺利启动。

【讨论】:

【参考方案4】:

将所有文件放在其他驱动器中,例如 D: 或 E: 并运行命令

【讨论】:

【参考方案5】:

将 kafka 文件夹重命名为更短的名称,例如 kafka2。 打开一个新的命令提示符(不要使用现有的/打开的命令提示符)

【讨论】:

【参考方案6】:

问题

kafka-run-class.bat 文件执行了一堆 CLASSPATH :concat 调用,这使得 CLASSPATH 很长。

根据您的环境,过长:Windows cmd.exe 环境限制为 8191 个字符。

解决方案

编辑kafka-run-class.bat 以便...

    使 CLASSPATH 不被使用或在别处设置 使路径更短,以便 concat 生成小于 8191 个字符的字符串 让 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-run-class.bat 中计算了 14 个“concat”调用。优。我发现的实例: 第 47 行:call :concat "%%i" 第 52 行:call :concat "%%i" 第 57 行:call :concat "%%i" 第 62 行:call :concat "%%i" 第 67 行: call :concat "%%i" Line 71: call :concat "%%i" Line 76: call :concat "%%i" Line 80: call :concat "%%i" Line 85: call :concat "% %i" 第 88 行:调用 :concat "%BASE_DIR%\connect\%%p\build\dependant-libs*" 第 94 行:REM 调用 :concat " 第 96 行:调用 :concat "%BASE_D 第 101 行:调用 :concat "%%i" 第 188 行::concat @petermeissner 我面临同样的问题。但不幸的是kafka和zookeeper正在启动。尝试启动 kafka 连接时,此解决方案失败【参考方案7】:

将 kafka 放在靠近驱动器根目录的位置,这样到它的路径就很短。

当您运行包含在 windows 目录中的那些 Kafka 批处理文件时,它们会与您的环境变量(类路径之一)混在一起,并且可以创建一个很长的输入行来实际运行命令/jar。

正如其他人指出的那样,确保您下载了二进制文件(是的,即使在 Kafka 网站上它被称为 Scala 二进制文件,并且在任何地方都没有提到 Windows,这可能会让人们感到困惑),而不是源代码。外行用户也会感到困惑,源代码分发在未压缩时看起来类似于二进制分发,例如它包含所有批处理文件,但它们不会运行。

【讨论】:

【参考方案8】:

我已将所有内容复制到 C:/tools/kafka 并且工作正常。问题确实是通往 kafka 的路太长了。

【讨论】:

请考虑editing 您的回答以添加一些解释和详细信息。 只需将 kafka 放在你的根目录中,就像这样 C:\kafka 就可以了【参考方案9】:

我尝试提取下载的 Kafka zip 文件联系人

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

从命令提示符(不要以管理员身份运行命令提示符)并且有效。

以管理员身份运行命令提示符导致了我的问题。

【讨论】:

【参考方案10】:

启动kafka时输入行太长

我尝试了下面的命令,但给了我同样的错误

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

发生这种情况是因为当我们在同一个 cmd 上连续执行相同的命令时,路径会附加到类路径中。

关闭命令提示符并再次打开,然后启动 Zookeeper 服务器。

【讨论】:

【参考方案11】:

删除kafka_2.13-2.5.0(如果有)并保持文件夹名称尽可能简单,如Kafka,同时确保路径中没有空格。

一个工作示例:文件夹位于C:\kafka一个不工作示例:文件夹位于C:\kafka 2\

【讨论】:

【参考方案12】:

对于 Windows,只需保持 Kafka 文件夹路径短 例如 - D/dev/kafka/bin/windows

【讨论】:

【参考方案13】:

对我来说,它只有在将 Kafka 文件夹保留在 C 目录下之后才有效,因此路径看起来像 C:\Kafka。我相信这会奏效。

【讨论】:

【参考方案14】:

关闭 Zookeeper 和 Kafka cmd 窗口并重新打开它对我有用。我尝试了上面的所有选项,除了 powershell。

【讨论】:

这不是真正的解决方案,请您尝试解释错误发生的原因以及如何解决,否则请您删除您的答案【参考方案15】:

我也有这个问题。调试 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

【讨论】:

【参考方案16】:

只需将 Kafka 路径移动到更小的根路径即可解决问题。例如"C:\卡夫卡"

【讨论】:

【参考方案17】:

从 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

【讨论】:

【参考方案18】:

我正在使用独家新闻。如下更改 ...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\*"

【讨论】:

【参考方案19】:

将 kafka_2.11-1.0.0 重命名为 kafka 并保存在 C 盘。这对我有用。

【讨论】:

这在其他答案中已经提到了。【参考方案20】:

请检查您的文件的目录路径,它不应在您保存 Kafka 的目录结构中包含任何“-”。 将目录名称从 kafka_2.13-2.7.0 --> Kafka 为我工作。

【讨论】:

以上是关于启动kafka时输入行太长的主要内容,如果未能解决你的问题,请参考以下文章

由于“输入行太长”,在 Windows 上运行 .bat 文件时出现问题

Windows安装部署yahoo的cmak运行时报错:输入行太长,命令语法不正确

IDEA 10.5 命令行太长

Intellij 10.8 命令行太长。缩短 Maven 中的命令行

IntelliJ:命令行太长。在 SBT 项目中缩短...的命令行

IntelliJ:命令行太长。在SBT项目中缩短...的命令行