在Windows上安装librdkafka以支持Python开发

时间:2016-10-06 16:25:16

标签: python windows apache-kafka

一点背景:我正在研究我们团队中其他开发人员将使用的一些python模块。每个模块的一个共同主题是将向Kafka发布一条或多条消息。我们此时打算使用Confluent Kafka客户端。我们在组织中对python开发很新 - 我们传统上一直是.NET商店。

复杂性:虽然我们创建的代码将在Linux(rhel 7)上运行,但大多数开发人员都将在Windows上开展工作。

所以我们需要在每个开发者机器上编译的librdkafka C库(它有自己的依赖项,其中一个是OpenSSL)。然后一个confluent-kafka的pip安装应该正常工作,这意味着我们的包的pip安装将起作用。理论上

首先,我在我的Linux笔记本电脑(Arch)上安装了。我知道我已经有了OpenSSL和其他zip lib依赖项,所以这个过程很简单:

  • git clone librdkafka repo
  • 按照README配置,制作和安装
  • pip install confluent-kafka
  • 完成

librdkafka的安装进入了/usr/local

/usr/local/lib/librdkafka.a
/usr/local/lib/librdkafka++.a
/usr/local/lib/librdkafka.so -> librdkafka.so.l
/usr/local/lib/librdkafka++.so -> librdkafka++.so.l
/usr/local/lib/librdkafka.so.l
/usr/local/lib/librdkafka++.so.l
/usr/local/lib/pkgconfig/rdkafka.pc
/usr/local/lib/pkgconfig/rdkafka++.pc
/usr/local/include/librdkafka/rdkafkacpp.h
/usr/local/include/librdkafka/rdkafka.h

现在是痛苦的部分,使其在Windows上运行:

  • 安装precompiled OpenSSL
  • git clone librdkafka repo
  • 在VS2015中打开
  • 通过NuGet安装libz
  • 构建解决方案
  • 安装到???

这就是我被困住的地方。 Windows 7/8/10计算机上的标准安装是什么样的?

我在构建输出中有以下内容,但不知道应该去哪里以使pip install confluent-kafka“正常工作”:

/librdkafka/win32/Release/librdkafka.dll
/librdkafka/win32/Release/librdkafka.exp
/librdkafka/win32/Release/librdkafka.lib
/librdkafka/win32/Release/librdkafkacpp.dll
/librdkafka/win32/Release/librdkafkacpp.exp
/librdkafka/win32/Release/librdkafkacpp.lib
/librdkafka/win32/Release/zlib.dll
<and the .h files back in the src>

有关安装位置的任何建议吗?

3 个答案:

答案 0 :(得分:1)

我不确定在Windows上安装的理想位置在哪里,但我运行了以下测试并取得了一些成功。

我将输出和标题复制到C:\test\libC:\test\include,然后使用以下选项运行pip安装:

 pip install --global-option=build_ext --global-option="-LC:\test\lib" --global-option="-IC:\test\include" confluent-kafka

不幸的是,这并不是很有效,因为此时汇合kafka设置不支持Windows:https://github.com/confluentinc/confluent-kafka-python/issues/52#issuecomment-252098462

答案 1 :(得分:0)

这是一个古老的问题,但似乎仍然不容易回答。 Confluent似乎太忙了,无法在Windows上支持...

几周前,我有同样的头痛,经过一些研究,我设法让它在Windows上运行。我记录了我的发现并将预编译的库上传到我的Git,请检查一下它是否有帮助。 :d

https://github.com/MichaelZhangCA/confluent-kafka-python

我的环境是Python 3.6 64位版本,但理想情况下,如果您采用相同的方法,它也应该适用于32位。

答案 2 :(得分:0)

我认为您已经成功遵循了上一篇文章的MichaelZhangCA(https://github.com/MichaelZhangCA/confluent-kafka-python/)的指示。

如果这样做,则可能是最后执行的两个命令:

::Install confluent-kafka
cd C:\confluent-kafka-python\confluent-kafka-python-0.11.4
python setup.py install

如果正确,那么这些DLL是在C:\confluent-kafka-python\librdkafka-reference\release\下创建的。

您所要做的就是将它们复制到Widnows的PATH中已经存在的目录中。

例如,我将Anaconda 5.2 For Windows和python 3.6一起使用。我的Anaconda Prompt在PATH中有一个空目录,因此我在其中复制了这些DLL:

::Anaconda Prompt - copy DLLs to a directory already in PATH
mkdir %CONDA_PREFIX%\Library\usr\bin
copy C:\confluent-kafka-python\librdkafka-reference\release %CONDA_PREFIX%\Library\usr\bin

如果不使用Anaconda,只需将这些DLL复制到Windows PATH中的任何其他目录。您也可以将它们保留在C:\confluent-kafka-python\librdkafka-reference\release中,然后将此目录添加到PATH。