在 windows 中启动 Confluent Schema Registry

Posted

技术标签:

【中文标题】在 windows 中启动 Confluent Schema Registry【英文标题】:Start Confluent Schema Registry in windows 【发布时间】:2016-12-31 22:29:39 【问题描述】:

我有 windows 环境和我自己的一套 kafka 和 zookeeper 正在运行。为了使用自定义对象,我开始使用 Avro。但我需要启动注册表。下载 Confluent 平台并运行:

$ ./bin/schema-registry-start ./etc/schema-registry/schema-registry.properties
/c/Confluent/confluent-3.0.0-2.11/confluent-3.0.0/bin/schema-registry-run-class: line 103: C:\Program: No such file or directory

然后我在安装页面看到这个:

“Confluent 目前不支持 Windows。Windows 用户可以下载和使用 zip 和 tar 存档,但必须直接运行 jar 文件,而不是使用 bin/ 目录中的包装脚本。”

我想知道如何在 Windows 环境中启动融合模式注册表?

看了脚本的内容,很难破译。

谢谢

【问题讨论】:

【参考方案1】:

有人按照 Ewen Cheslack-Postava 的建议创建了 Windows .bat 文件

https://github.com/renukaradhya/confluentplatform/tree/master/bin/windows

我将 schema-registry-run-class.batschema-registry-start.bat 保存到我的 \confluent\bin\windows 目录中,然后能够使用

运行架构注册表

C:\confluent\bin\windows\schema-registry-start.bat C:\confluent\etc\ schema-registry\schema-registry.properties

【讨论】:

错误:无法找到或加载主类 io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain 原因:java.lang.ClassNotFoundException: io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain跨度> 【参考方案2】:

目前,Confluent Platform 不附带任何适用于 Windows 的脚本。但是,如果您对运行 Java 应用程序感到满意,您可以自己编写。 schema-registry-server-start 脚本(以及它所依赖的 schema-registry-run-class 脚本)执行诸如处理 -daemon 模式、设置 Java 内存选项、设置默认日志配置等操作,但最终关键是它们使用 @ 执行 Java 987654325@作为主要方法。您可能还会发现来自 Kafka 的 kafka-run-class.bat 作为有用的基础:https://github.com/apache/kafka/blob/trunk/bin/windows/kafka-run-class.bat

【讨论】:

【参考方案3】:

问题可能是您的 Windows 环境的 JAVA_HOME 环境设置中存在空格(如“C:\Program”而不是“C:\Program Files...”的错误消息所示。

您可以通过添加将 schema-registry-run-class 脚本中的最后一个“exec”替换为单词“echo”来确定启动 schema_registry 的最终 java 调用的确切语法。你会看到相当复杂的命令

/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java -Xmx512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dlog4j.configuration=file:/opt/confluent/bin/../etc/schema-registry/log4j.properties -cp :/opt/confluent/bin/../package-schema-registry/target/kafka-schema-registry-package-*-development/share/java/schema-registry/*:/opt/confluent/bin/../share/java/confluent-common/*:/opt/confluent/bin/../share/java/rest-utils/*:/opt/confluent/bin/../share/java/schema-registry/* io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain

该命令归结为“java [core-java-opts] [java-defines] -cp [classpath] io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain

如果您将“/opt/confluent”引用替换为您的 Confluent 安装的实际位置,我怀疑您的运气会更好。

注意:我更喜欢在 Windows 上将 Java 安装到客户位置(例如“C:\java8”,因为许多标准脚本会在 C:\Program Files 部署位置出现问题。

【讨论】:

感谢 Java8 安装位置的提示!【参考方案4】:

我已经成功地使用 cygwin 从 cmd.exe 运行了融合工具。

C:\>c:\cygwin64\bin\bash -l /cygdrive/c/confluent/4.0.0/bin/kafka-avro-console-consumer --bootstrap-server <my_server_name>:9092 --topic <my_topic> --property schema.registry.url=http://<my_schema_registry_url>:8081 >> tmp.txt

【讨论】:

【参考方案5】:

模式注册运行类bat文件的代码是: 另存为 schema-registry-run-class.bat

@echo off

setlocal EnableExtensions EnableDelayedExpansion
pushd %~dp0..\..
set BASE_DIR=%CD%
popd

for %%i in (%BASE_DIR%/package-schema-registry/target/kafka-schema-registry-package-*-development) do (
    call :concat %%i/share/java/schema-registry/*
)

for %%i in (confluent-common, rest-utils, schema-registry) do (
    call :concat %BASE_DIR%/share/java/%%i/*
)

rem Log4j settings
IF ["%SCHEMA_REGISTRY_LOG4J_OPTS%"] EQU [""] (
    if exist %~dp0../../etc/schema-registry/log4j.properties (
        set SCHEMA_REGISTRY_LOG4J_OPTS=-Dlog4j.configuration=file:%~dp0../../etc/schema-registry/log4j.properties
    ) else (
        set SCHEMA_REGISTRY_LOG4J_OPTS=-Dlog4j.configuration=file:%BASE_DIR%/config/log4j.properties
    )
)

rem JMX settings
IF ["%SCHEMA_REGISTRY_JMX_OPTS%"] EQU [""] (
    set SCHEMA_REGISTRY_JMX_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false
)

rem JMX port to use
IF ["%JMX_PORT%"] NEQ [""] (
    set SCHEMA_REGISTRY_JMX_OPTS=%SCHEMA_REGISTRY_JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
)

rem Which java to use
IF ["%JAVA_HOME%"] EQU [""] (
    set JAVA=java
) ELSE (
    set JAVA="%JAVA_HOME%/bin/java"
)

rem Memory options
IF ["%SCHEMA_REGISTRY_HEAP_OPTS%"] EQU [""] (
    set SCHEMA_REGISTRY_HEAP_OPTS=-Xmx512M
)

rem JVM performance options
IF ["%SCHEMA_REGISTRY_JVM_PERFORMANCE_OPTS%"] EQU [""] (
    set SCHEMA_REGISTRY_JVM_PERFORMANCE_OPTS=-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true
)

set COMMAND=%JAVA% %SCHEMA_REGISTRY_HEAP_OPTS% %SCHEMA_REGISTRY_JVM_PERFORMANCE_OPTS% %SCHEMA_REGISTRY_JMX_OPTS% %SCHEMA_REGISTRY_LOG4J_OPTS% -cp %CLASSPATH% %SCHEMA_REGISTRY_OPTS% %*
%COMMAND%

goto :eof
:concat
IF ["%CLASSPATH%"] EQU [""] (
  set CLASSPATH="%1"
) ELSE (
  set CLASSPATH=%CLASSPATH%;"%1"
)

【讨论】:

【参考方案6】:

模式注册表 bat 文件的代码。 另存为 schema-registry-start.bat


@echo off

%~dp0schema-registry-run-class.bat io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain %*

架构注册表属性文件应如下所示: 另存为 schema-registry.properties

listeners=http://10.91.31.169:8081
kafkastore.connection.url=10.91.31.169:2181
kafkastore.topic=_schemas
debug=true

【讨论】:

以上是关于在 windows 中启动 Confluent Schema Registry的主要内容,如果未能解决你的问题,请参考以下文章

基于Kafka的高性能流处理平台——Confluent

如何将 Kafka (Java) 应用程序从 Windows 连接到 Linux 中的 Confluent

如何在不使用 Docker 或 Windows Server 2016 上的 Confluent 平台的情况下在 Kafka 中设置 Debezium SQL Server 连接器?

在没有安装 Confluent 平台的情况下使用 Confluent Hub

无法读取 Kafka 主题 avro 消息

HDF 模式注册表和 Confluent 之间的主要区别是啥?