Folosirea confluent-kafka-go pe MacOS M1
- 1 minute de citit
- 5 exemple de cod
Disponibil și în English
Salut,
Pe scurt;
brew install librdkafka openssl@3 pkg-configexport PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig"go test -tags dynamic ./...Am trecut de la o mașină Linux la un MacOS M1 la serviciu și, când am rulat testele pentru un proiect Golang, am observat că testele au eșuat la modulele care depind de librdkafka.
Inițial am avut probleme cu Kafka pe MacOS M1 în Docker, deoarece foloseam o versiune mai veche a imaginii care nu avea o construcție pentru arm64; actualizarea imaginilor la versiunea 7.2.1[1] a rezolvat problemele.
De data aceasta, însă, problemele erau cu dependențele mele Golang și nu cu containerele Docker. Rularea testelor a produs:
go test ./...[...]ld: warning: ignoring file /Users/dnutiu/go/pkg/mod/github.com/confluentinc/[email protected]/kafka/librdkafka_vendor/librdkafka_darwin.a, building for macOS-arm64 but attempting to link with file built for macOS-x86_64Undefined symbols for architecture arm64:„Undefined symbols for architecture arm64” Bănuiesc că pachetul confluent-kafka-go publicat nu conține (încă) simboluri pentru arm64; pentru a remedia problema, poți folosi modulul cu o altă versiune de librdkafka.
Când instalezi formula librdkafka din Homebrew, biblioteca este construită pentru arhitectura arm64. Pentru a o instala, rulează:
brew install librdkafka openssl@3 pkg-configApoi, vom folosi un instrument numit pkg-config pentru a-i indica librdkafka unde să găsească celelalte biblioteci. Deoarece depinde de openssl, trebuie să exportăm PKG_CONFIG_PATH. Pentru a afla valoarea, rulează:
brew info openssl==> openssl@3: stable 3.0.5 (bottled) [keg-only]Cryptography and SSL/TLS Toolkithttps://openssl.org//opt/homebrew/Cellar/openssl@3/3.0.5 (6,444 files, 27.9MB) Poured from bottle on 2022-08-31 at 14:10:49From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/[email protected]License: Apache-2.0==> DependenciesRequired: ca-certificates ✘==> CaveatsA CA file has been bootstrapped using certificates from the systemkeychain. To add additional certificates, place .pem files in /opt/homebrew/etc/openssl@3/certsand run /opt/homebrew/opt/openssl@3/bin/c_rehashopenssl@3 is keg-only, which means it was not symlinked into /opt/homebrew,because macOS provides LibreSSL.If you need to have openssl@3 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrcFor compilers to find openssl@3 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib" export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"For pkg-config to find openssl@3 you may need to set: export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig"Verifică că totul funcționează rulând:
pkg-config --libs --cflags rdkafka-I/opt/homebrew/Cellar/openssl@3/3.0.5/include -I/opt/homebrew/Cellar/librdkafka/1.9.2/include -I/opt/homebrew/Cellar/zstd/1.5.2/include -I/opt/homebrew/Cellar/lz4/1.9.4/include -L/opt/homebrew/Cellar/librdkafka/1.9.2/lib -lrdkafkaAcum, tot ce trebuie să faci este să rulezi testele cu opțiunea -tags dynamic; aceasta îi va indica lui confluent-kafka-go să folosească biblioteca librdkafka pe care am compilat-o din sursă.
Mulțumesc că ai citit și spor la programat!🫶