confluent-kafka-python icon indicating copy to clipboard operation
confluent-kafka-python copied to clipboard

M1 Mac - confluent-kafka librdkafka error message when building Docker image

Open yusufosman opened this issue 3 years ago • 4 comments

Description

I'm getting the below error whenever I try to pip install confluent-kafka within my Dockerfile and I build that Dockerfile using python:3.10-slim-bullseye as my base image.

error: #error "confluent-kafka-python requires librdkafka v1.9.0 or later. Install the latest version of librdkafka from the Confluent repositories, see http://docs.confluent.io/current/installation.html"

Please note that I have already installed librdkafka-dev as part of my Dockerfile, and this has been working fine for months until recently, but now it seems to be complaining that I don't have librdkafka and I'm not sure why.

How to reproduce

Dockerfile

FROM public.ecr.aws/docker/library/python:3.10-slim-bullseye

# hadolint ignore=DL3008
RUN apt-get update && apt-get install --no-install-recommends -y \
  gcc \
  librdkafka-dev \
  build-essential \
  && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir --upgrade pip==22.1.2 && pip install confluent-kafka

run docker build - < Dockerfile against the above Docker file and you will see the error I provided.

The only way I can successfully build the image is via the following command: docker build --platform linux/amd64 - < Dockerfile

yusufosman avatar Aug 04 '22 21:08 yusufosman

it seems like the librdkafka version installed via librdkafka-dev is less than 1.9.0.

does it work without installing librdkafka-dev? (i'm unsure what architecture will be required given your setup, but think there is a binary wheel that might work)

mhowlett avatar Aug 07 '22 15:08 mhowlett

it seems like the librdkafka version installed via librdkafka-dev is less than 1.9.0.

does it work without installing librdkafka-dev? (i'm unsure what architecture will be required given your setup, but think there is a binary wheel that might work)

No unfortunately not, I need to have librdkafka-dev in order for for the build to work. If I don't use librdkafka-dev then I get different errors related to how it can't find certain header files.

yusufosman avatar Aug 08 '22 08:08 yusufosman

I ran into exactly the same problem and for now I build from source with these few lines:

RUN apt update && apt -y install software-properties-common gcc
RUN git clone https://github.com/edenhill/librdkafka
RUN cd librdkafka && ./configure && make && make install && ldconfig

Works for me, although its a temporary fix until they update to 1.9.0

pontusstjerna avatar Aug 09 '22 14:08 pontusstjerna

Thanks @pontusstjerna that finally worked for me.

I have a similar issue installing it in Docker FROM ubuntu:22.04 on my M1 host.

Tried to add debian/ubuntu repository:

> wget -qO - https://packages.confluent.io/deb/7.2/archive.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/confluent.gpg > /dev/null
> add-apt-repository "deb [arch=amd64] https://packages.confluent.io/deb/7.2 stable main"
> add-apt-repository "deb https://packages.confluent.io/clients/deb focal main"  # jammy release doesn't exist
> apt udpate
> apt install confluent-platform

with the following outcome:

confluent-platform : Depends: confluent-cli (= 7.2.1-1) but it is not installable
                      Recommends: confluent-server (= 7.2.1-1) but it is not going to be installed or
                                  kafka

alright, let's install kafka then:

> apt install -y kafka

Package kafka is a virtual package provided by:
  confluent-server 7.2.1-1
  confluent-kafka 7.2.1-1
You should explicitly select one to install.

E: Package 'kafka' has no installation candidate

:(

apt install confluent-kafka

works.

> apt install confluent-platform

The following packages have unmet dependencies:
 confluent-platform : Depends: confluent-cli (= 7.2.1-1) but it is not installable
E: Unable to correct problems, you have held broken packages.

https://docs.confluent.io/confluent-cli/current/install.html

> curl -sL --http1.1 https://cnfl.io/cli | sh -s -- latest

confluentinc/cli crit platform linux/arm64 is not supported.  Please contact Confluent support if you believe this is a mistake.

Alright, I am giving up.

Thanks again @pontusstjerna for the solution that worked.

tfrokt avatar Aug 17 '22 04:08 tfrokt

I am running into this issue as well trying to build an ubuntu based container on an M1 host. I can confirm that following the instructions to build from source results in a librdkafka-dev < 1.9.0

$ apt install -y librdkafka-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  librdkafka++1 librdkafka1
The following NEW packages will be installed:
  librdkafka++1 librdkafka-dev librdkafka1
0 upgraded, 3 newly installed, 0 to remove and 8 not upgraded.
Need to get 1313 kB of archives.
After this operation, 6261 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main arm64 librdkafka1 arm64 1.6.0-1 [515 kB]
Get:2 http://deb.debian.org/debian bullseye/main arm64 librdkafka++1 arm64 1.6.0-1 [51.5 kB]
Get:3 http://deb.debian.org/debian bullseye/main arm64 librdkafka-dev arm64 1.6.0-1 [746 kB]
Fetched 1313 kB in 1s (2574 kB/s)      
Selecting previously unselected package librdkafka1:arm64.
(Reading database ... 32324 files and directories currently installed.)
Preparing to unpack .../librdkafka1_1.6.0-1_arm64.deb ...
Unpacking librdkafka1:arm64 (1.6.0-1) ...
Selecting previously unselected package librdkafka++1:arm64.
Preparing to unpack .../librdkafka++1_1.6.0-1_arm64.deb ...
Unpacking librdkafka++1:arm64 (1.6.0-1) ...
Selecting previously unselected package librdkafka-dev:arm64.
Preparing to unpack .../librdkafka-dev_1.6.0-1_arm64.deb ...
Unpacking librdkafka-dev:arm64 (1.6.0-1) ...
Setting up librdkafka1:arm64 (1.6.0-1) ...
Setting up librdkafka++1:arm64 (1.6.0-1) ...
Setting up librdkafka-dev:arm64 (1.6.0-1) ...
Processing triggers for libc-bin (2.31-13+deb11u4) ...

tmbo avatar Oct 07 '22 14:10 tmbo

using #1439 to track this.

you could consider getting the 1.9.x source from github, rather than install with a package.

mhowlett avatar Oct 25 '22 16:10 mhowlett

I had a similar issue:

In my specific case, the confluent-kafka version needed was >= 2.0.2, hence the version in command. Since I am using a python slim buster, that's why wget, gcc, g++ and make, otherwise rest should work.

This worked for me:

RUN apt-get update && apt-get install -y wget gcc g++ make
RUN wget https://github.com/edenhill/librdkafka/archive/v2.0.2.tar.gz && tar xvzf v2.0.2.tar.gz
RUN cd librdkafka-2.0.2/ && ./configure && make && make install && ldconfig

anmollp avatar Aug 16 '23 22:08 anmollp

@anmollp - the solution which you've shared worked for me, thanks! 👍🏼

harshit98 avatar Sep 15 '23 15:09 harshit98