เรื่องของเรื่อง คือ มี Task ที่ต้องใช้งาน Kafka บน PHP และมีการทำในส่วนของ Authentication เพิ่มเติมด้วย SASL เรื่องราวดูไม่น่าตื่นเต้นอะไร แต่เมื่อเราพบว่า Package ที่ใช้อยู่นั้นยังไม่ได้ Release feature นี้
ทำให้เราต้องรีบควานหา Package ตัวใหม่ซึ่งเราก็ไปเจอเข้ากับตัวนี้เข้า
สิ่งที่กลายมาเป็นปัญหา คือ เรื่องของการติดตั้ง เพราะดูเหมือนว่า RdKafka นั้นมีอะไรแอบแฝงอยู่ ซึ่งต้องทำใจร่มๆ แล้วนั่งอ่านให้ละเอียดก่อนจะเข้าใจว่า PHP RdKafka นั้นเป็น Kafka Client ที่ถูกพัฒนาโดยมี core หลักจาก libkafka
แปลว่าก่อนที่เราจะติดตั้ง PHP RdKafka ด้เราจำเป็นจะต้องติดตั้ง libkafka ก่อน
แล้วไหนล่ะปัญหา?
ปัญหา คือ dev environment ของเราใช้ container แต่ production และ staging ยังคงเป็น Server แบบ Bare metal เพราะงั้นการติดตั้งก็จะแตกต่างกันออกไป เนื่องด้วยเพราะความรีบ และไม่ค่อยมีสติ ทำให้งมอยู่นาน เมื่อทำได้แล้วก็เลยอยากมาแชร์ เผื่อใครกำลังติดหลุมเดียวกันจะได้ไม่ต้องจมอยู่กับมันนาน 555+
การติดตั้งบน Docker
โชคดีที่มาเจอกันช้าไป เพราะก่อนหน้านี้การติดตั้ง RdKafka บน Alpine นั้นต้องมีกรรมวิธีเยอะมาก คือ ต้อง clone repository มาแล้ว make install เอง แต่ปัจจุบันสามารถทำได้เลยง่ายๆ
FROM php:8.0-fpm-alpineARG RDKAFKA_VERSION="5.0.0"RUN apk add --no-cache --virtual .persistent-deps \
librdkafkaRUN set -xe \
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
librdkafka-dev \
&& pecl install rdkafka-${EXT_RDKAFKA_VERSION} \
&& docker-php-ext-enable rdkafka \
&& apk del -f .build-deps \
&& rm -rf /var/cache/apk/*....
การติดตั้งบน Server ที่เป็น Bare Metal
sudo apt-get install libkafka-dev -y
sudo pecl install rdkafka// เอาด้านล่างไปใส่ใน php.ini เพื่อ enable extension
extension=rdkafka.so
ข้อควรระวัง เมื่อคุณเจอปัญหา PHP ไม่สามารถที่จะ Compile หรือไม่สามารถโหลดใช้งาน extension ได้ ในช่วงระหว่างที่ติดตั้งถ้าเจอ warning message ด้านล่าง
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
ให้รันคำสั่ง pecl channel-update pecl.php.net
เพื่ออัพเดท pecl ให้โหลด package ตัวล่าสุดมา จะสามารถช่วยแก้ปัญหาการติดตั้งได้ในระดับหนึง
หมดแล้วคร้าบบบบบ หวังว่าบทความนี้จะช่วยให้ใครที่หลงมาอ่านสามารถติดตั้งได้นะครับ :)
ความคิดเห็น
แสดงความคิดเห็น