1. 程式人生 > 其它 >PHP Kafka client ------ php-rdkafka

PHP Kafka client ------ php-rdkafka

技術標籤:librdkafkaphp-rdkafka

安裝PHP參考:https://blog.csdn.net/abcdu1/article/details/112317578

1.安裝librdkafka

(1)下載

https://github.com/edenhill/librdkafka

(2)解壓配置

tar -zxvf librdkafka.tar.gz
cd librdkafka/
./configure

(3)編譯安裝

make && make install

2.安裝php-rdkafka

(1)下載

https://github.com/arnaud-lb/php-rdkafka

(2)解壓配置

必須安裝PHP 才可以執行 phpize命令,安裝PHP參考

tar -zxvf  php-rdkafka.tar.gz
cd php-rdkafka/
phpize
./configure

(3)編譯安裝

make all -j 5
sudo make install

(4)配置php.ini 檔案

開啟php.ini ,新增

extension=rdkafka.so

(5)安裝測試

php -i | grep rdkafka

3.程式碼示例執行

(1)程式碼示例

新建檔案producer.php , 將下面程式碼複製進去,修改如下兩行:

$conf->set('metadata.broker.list','localhost:9092'); //修改為自己建立的broker地址

$topic=$producer->newTopic("test"); //修改為自己建立的topic

<?php

$conf = new RdKafka\Conf();
$conf->set('metadata.broker.list', 'localhost:9092');

//If you need to produce exactly once and want to keep the original produce order, uncomment the line below
//$conf->set('enable.idempotence', 'true');

$producer = new RdKafka\Producer($conf);

$topic = $producer->newTopic("test");

for ($i = 0; $i < 10; $i++) {
    $topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message $i");
    $producer->poll(0);
}

for ($flushRetries = 0; $flushRetries < 10; $flushRetries++) {
    $result = $producer->flush(10000);
    if (RD_KAFKA_RESP_ERR_NO_ERROR === $result) {
        break;
    }
}

if (RD_KAFKA_RESP_ERR_NO_ERROR !== $result) {
    throw new \RuntimeException('Was unable to flush, messages might be lost!');
}

?>

(2)執行測試

儲存檔案後,執行

php producer.php 

可以看到訊息推入到 kafka 對應topic中。

參考:

https://github.com/edenhill/librdkafka

https://github.com/arnaud-lb/php-rdkafka

https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc/rdkafka.examples-producer.html

https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc/rdkafka.installation.manual.html

https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc/rdkafka.installation.windows.html