安裝librdkafka 庫
git clone https://github.com/edenhill/librdkafka.git
./configure
make
sudo make install
安裝php-rdkafka 擴展
$ git clone https://github.com/arnaud-lb/php-rdkafka.git
#生成configure文件
$ /Users/shiyibo/LNMP/php/bin/phpize
#編譯安裝
$ ./configure --with-php-config=/Users/shiyibo/LNMP/php/bin/php-config
$ make
$ make install
#在php.ini 文件中配置 rdkafka擴展
$ vim /Users/shiyibo/LNMP/php/etc/php.ini
extension=rdkafka.so
#查看擴展是否生效
$php -m | grep kafka
image.png
編碼實現
生產者
- 代碼實現
<?php
/**
* Created by PhpStorm.
* User: shiyibo
* Date: 2019/2/24
* Time: 12:57 PM
*/
/**
* 消息生產者
*
* 實現的例子來源於:
*
* https://github.com/arnaud-lb/php-rdkafka#examples
*/
$objRdKafka = new RdKafka\Producer();
$objRdKafka->setLogLevel(LOG_DEBUG);
$objRdKafka->addBrokers("localhost:9092");
$oObjTopic = $objRdKafka->newTopic("test");
// 從終端接收輸入
$oInputHandler = fopen('php://stdin', 'r');
while (true) {
echo "\nEnter messages:\n";
$sMsg = trim(fgets($oInputHandler));
// 空消息意味着退出
if (empty($sMsg)) {
break;
}
// 發送消息
$oObjTopic->produce(RD_KAFKA_PARTITION_UA, 0, $sMsg);
}
echo "done\n";
- 檢驗發送是否成功
終端開啓一個消費者:
# 因爲生產者會往test的topic中發送消息,消費者直接消費test即可
kafka-console-consumer --bootstrap-server localhost:9092 --topic test
生產者端發送:
image.png
消費者端接收:
image.png
消費者
- 代碼實現
<?php
/**
* 消費者消費消息
*
* 實現的例子來源於:
*
* https://github.com/arnaud-lb/php-rdkafka#examples
*/
$objRdKafka = new RdKafka\Consumer();
$objRdKafka->setLogLevel(LOG_DEBUG);
$objRdKafka->addBrokers("localhost:9092");
$oObjTopic = $objRdKafka->newTopic("test");
/**
* consumeStart
* 第一個參數標識分區,生產者是往分區0發送的消息,這裏也從分區0拉取消息
* 第二個參數標識從什麼位置開始拉取消息,可選值爲
* RD_KAFKA_OFFSET_BEGINNING : 從開始拉取消息
* RD_KAFKA_OFFSET_END : 從當前位置開始拉取消息
* RD_KAFKA_OFFSET_STORED : 猜測跟RD_KAFKA_OFFSET_END一樣
*/
$oObjTopic->consumeStart(0, RD_KAFKA_OFFSET_END);
while (true) {
// 第一個參數是分區,第二個參數是超時時間
$oMsg = $oObjTopic->consume(0, 1000);
// 沒拉取到消息時,返回NULL
if (!$oMsg) {
usleep(10000);
continue;
}
if ($oMsg->err) {
echo $msg->errstr(), "\n";
break;
} else {
echo $oMsg->payload, "\n";
}
}
-
校驗
生產者端發送:image.png
消費者端接收:
作者:dayeshisir
鏈接:https://www.jianshu.com/p/fd8ce54e1156
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。