首页 > 解决方案 > 在共享库“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/kafkaDocker 映像。

一切都在不同的服务器上运行,使用完全相同的 Confluent.Kafka 包版本,并且librdkafka1安装了完全相同的版本。有想法该怎么解决这个吗?

标签: linuxdockerapache-kafka

解决方案


我从 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,并重新部署以安装依赖项。


推荐阅读