linux - 在共享库“librdkafka”中找不到名为“rd_kafka_producev”的入口点
问题描述
我正在开发一个使用 Nuget 包的 .NET Core 应用程序 - Confluent.Kafka,版本 0.11.3
我用它来实例化 a Producer
,然后调用该myProducer.ProduceAsync
方法。我在应用程序日志中收到错误说明 - Unable to find an entry point named 'rd_kafka_producev' in shared library 'librdkafka'
。
我在 Debian v9 上运行的容器中运行 Kafka。librdkafka1 - v0.9.3-1
已安装运行使用 Kafka 的 .NET Core 应用程序的 docker 容器。我需要将它作为 Docker 映像的一部分手动安装到容器中,使用:
RUN apt-get update -y
RUN apt-get install -y librdkafka-dev
我不明白为什么我仍然需要手动安装它 - 这是为了修复根本找不到库的错误。它不应该已经存在于图像上吗?我正在使用标准的wurstmeister/kafka
Docker 映像。
一切都在不同的服务器上运行,使用完全相同的 Confluent.Kafka 包版本,并且librdkafka1
安装了完全相同的版本。有想法该怎么解决这个吗?
解决方案
我从 Docker 文件中删除了这个:
RUN apt-get update -y
RUN apt-get install -y librdkafka-dev
然后,从运行我的应用程序的 Debian 容器中删除librdkafka1
。将我的应用程序重新部署到容器中,现在它可以工作了。奇怪的是,librdkafka1
现在不作为容器上的包存在。
我发现这librdkafka1
是我的 .NET Core 项目中的 .NET Confluent.Kafka 依赖项所需的 C++ 库。我还提出了这个Github 问题,librdkafka 的创建者 Magnus Edenhill 提供了以下信息:
confluent-kafka-dotnet 依赖于包含 librdkafka 的 librdkafka.redist nuget 包,因此您通常不必在系统上手动安装 librdkafka(在某些情况下您可能会这样做,例如使用 GSSAPI 时)。
所以在大多数情况下,只要你的解决方案中有 Confluent.Kafka nuget 包作为依赖项,就librdkafka
应该以某种方式安装。因此,如果您遇到与我类似的问题,可能值得清除您的部署/容器和任何显式安装的实例librdkafka1
,并重新部署以安装依赖项。
推荐阅读
- ssh - 无法通过 SSH 连接到 Google Cloud/Compute Engine 上的服务器
- c# - 使用嵌套泛型类型调用方法
- javascript - 如何用firebase函数做一个api
- javascript - 单击包含的复选框时如何防止打开href url
- r - 替换 Excel 工作簿中的数据
- reactjs - 在生产版本中生成多个具有相同名称的关键帧(不使用 css 模块)
- javascript - 在 React 中使用数组设置状态
- jmeter - JMeter边界提取器忽略大小写
- javascript - Angular 5开发与生产代码面临一个奇怪的问题
- c# - SQL Query 返回 2 个结果,但在 c# 网页中仅显示 1 个结果