apache-kafka - Vertica-Kafka vkconfig 连接器
问题描述
我正在尝试定义一个 Vertica-Kafka 调度程序。我成功运行了前几个命令,但在以下命令上失败了:
$ /opt/vertica/packages/kafka/bin/vkconfig source --create --cluster kafka_nms_cluster --source test --partitions 1 --conf /home/vertica/vkconfig/vkconfig.conf
我得到的错误
Exception in thread "main" com.vertica.solutions.kafka.exception.ConfigurationException: ERROR: [[Vertica][VJDBC](5861) ERROR: Error calling processPartition() in User Function KafkaListTopics at [/data/qb_workspaces/jenkins2/ReleaseBuilds/Grader/REL-9_2_1-x_grader/build/udx/supported/kafka/KafkaUtil.cpp:163], error code: 0, message: Error getting metadata: [Local: Broker transport failure]]
at com.vertica.solutions.kafka.model.StreamSource.validateConfiguration(StreamSource.java:248)
at com.vertica.solutions.kafka.model.StreamSource.setFromMapAndValidate(StreamSource.java:194)
at com.vertica.solutions.kafka.model.StreamModel.<init>(StreamModel.java:93)
at com.vertica.solutions.kafka.model.StreamSource.<init>(StreamSource.java:44)
at com.vertica.solutions.kafka.cli.SourceCLI.getNewModel(SourceCLI.java:62)
at com.vertica.solutions.kafka.cli.SourceCLI.getNewModel(SourceCLI.java:13)
at com.vertica.solutions.kafka.cli.CLI.run(CLI.java:59)
at com.vertica.solutions.kafka.cli.CLI._main(CLI.java:141)
at com.vertica.solutions.kafka.cli.SourceCLI.main(SourceCLI.java:29)
Caused by: java.sql.SQLNonTransientException: [Vertica][VJDBC](5861) ERROR: Error calling processPartition() in User Function KafkaListTopics at [/data/qb_workspaces/jenkins2/ReleaseBuilds/Grader/REL-9_2_1-x_grader/build/udx/supported/kafka/KafkaUtil.cpp:163], error code: 0, message: Error getting metadata: [Local: Broker transport failure]
at com.vertica.util.ServerErrorData.buildException(Unknown Source)
at com.vertica.dataengine.VResultSet.fetchChunk(Unknown Source)
at com.vertica.dataengine.VResultSet.initialize(Unknown Source)
at com.vertica.dataengine.VQueryExecutor.readExecuteResponse(Unknown Source)
at com.vertica.dataengine.VQueryExecutor.handleExecuteResponse(Unknown Source)
at com.vertica.dataengine.VQueryExecutor.execute(Unknown Source)
at com.vertica.jdbc.common.SPreparedStatement.executeWithParams(Unknown Source)
at com.vertica.jdbc.common.SPreparedStatement.executeQuery(Unknown Source)
at com.vertica.solutions.kafka.model.StreamSource.validateConfiguration(StreamSource.java:227)
... 8 more
Caused by: com.vertica.support.exceptions.NonTransientException: [Vertica][VJDBC](5861) ERROR: Error calling processPartition() in User Function KafkaListTopics at [/data/qb_workspaces/jenkins2/ReleaseBuilds/Grader/REL-9_2_1-x_grader/build/udx/supported/kafka/KafkaUtil.cpp:163], error code: 0, message: Error getting metadata: [Local: Broker transport failure]
... 17 more
但是,当我尝试使用 vsql 运行 KafkaListTopics 时,结果集显示了具有 1 个分区的测试主题。
[root@dal_server1 ~]# /opt/vertica/bin/vsql -U vertica -c "SELECT KafkaListTopics(USING PARAMETERS brokers='10.22.2.38:9092') OVER ();"
topic | num_partitions
--------------------+----------------
__consumer_offsets | 50
test | 1
TutorialTopic | 1
(3 rows)
什么可能导致此错误?
谢谢阿维
解决方案
问题实际上可能与您在尝试创建源之前创建的集群有关。在测试 Vertica/Kafka 集成时,我遇到了同样的问题,其中测试 Kafka 集群没有 DNS 条目,但 DNS 名称存储在stream_clsuters
表中。
查询<scheduler_config_schema>.stream_clusters
表。如果存储了 DNS 名称而不仅仅是一个普通的 IP 地址,那么您可以做两件事。
- 如果只有一个 Kafka 节点,或者有多个,则对
stream_clusters
表进行手动更新以将其更改为。<ip_address>:<port>
<ip_address1>:<port>,...,<ip_addressN>:<port>
- 或者,将域名添加到
/etc/hosts
所有 Vertica 节点上
例如,在stream_clusters
表中,您会看到domain_name_1:9092
运行以下 UPDATE 语句:
UPDATE <scheduler_config_schema>.stream_clusters
SET hosts = '10.22.2.38:9092'
WHERE id = <some_id>
通常,我建议不要对这些调度程序配置表执行任何类型的手动 DML,但我之前已经完成了这个特定的更新并且它是安全的(尤其是在测试中)。
当然,在真正的生产环境中,Kafka 集群应该在您的网络中有 DNS 条目,您不必担心这个错误,但是对于使用 VM 或 Docker 容器进行测试,我已经多次遇到这个问题和上面的建议成功了。
推荐阅读
- javascript - 需要使用导航器脚本启动器扩展在 YouTube 中将 JavaScript 转换为大写希腊语的建议
- python - 比较 2 个值并仅返回索引
- typescript - 将字符串数组分配给 keyof T 数组可以正确编译
- python - Pytest 找不到 Lambda 层中定义的函数
- spring-boot - Spring Cloud Stream Kafka Binder KafkaTransactionManager 导致应用程序上下文中的循环
- tensorflow - 张量与测试中的目标值不匹配
- r - R:如何添加标题并增加绘图中子图之间的边距/空间
- javascript - 如何在 react-native 中使用原生模块
- amazon-web-services - terraform :确定目标区域是否支持 AWS 服务
- apache-spark - 火花上下文关闭失败是否表明以前的地图减少步骤中有任何错误?