php發送資料到kafka實現代碼

來源:互聯網
上載者:User
kafka僅僅是個小小的紐帶。經常用於資料的發送及轉移。在kafka官方的例子中,其實並沒有php的相關實現版本。現在網上流傳的kafka的相關php庫,都是些編程愛好者們自己寫的類庫,所以就肯定不會有太統一的介面標準了。

下面以某個類庫為例,展示相關的kafka的php擴充庫使用。綜合比較了幾家kafka的php庫,蘇南大叔覺得下面的這個開源類庫,nmred/kafka-php ,比較簡潔方便一些。

先要安裝composer的類庫nmred/kafka-php 。

composer的基本使用問題,大家可以查看我的composer相關文章。 https://newsn.net/tag/composer/ 。

composer require "nmred/kafka-php" -vvv

當然,你也可以使用鏡像加速下載。

{  "config": {      "secure-http": false,      "preferred-install": "dist",      "sort-packages": true  },  "repositories": {      "packagist": {          "type": "composer",          "url": "https://packagist.phpcomposer.com"      }  },  "require": {    "nmred/kafka-php": "v0.2.0.7"  }}

確定連接埠及topic,查看kafka版本號碼

我選擇本地的連接埠是9092,topic是test1,同時查看我本地的kafka版本是0.11.0.0。這些在代碼中都是要用到的。

生產者代碼(非同步)

<?phprequire 'vendor/autoload.php';date_default_timezone_set('PRC');// use Monolog\Logger;// use Monolog\Handler\StdoutHandler;// // Create the logger// $logger = new Logger('my_logger');// // Now add some handlers// $logger->pushHandler(new StdoutHandler());$config = \Kafka\ProducerConfig::getInstance();$config->setMetadataRefreshIntervalMs(10000);$config->setMetadataBrokerList('127.0.0.1:9092');$config->setBrokerVersion('0.11.0.0');$config->setRequiredAck(1);$config->setIsAsyn(false);$config->setProduceInterval(500);$producer = new \Kafka\Producer(function() {    return array(        array(            'topic' => 'test1',     //注意對應topic            'key' => 'testkey',            'value' => 'test....message.',            ),    );});// $producer->setLogger($logger);$producer->success(function($result) {    var_dump($result);});$producer->error(function($errorCode) {    var_dump($errorCode);});$producer->send(true);

生產者代碼(同步)

<?phprequire 'vendor/autoload.php';date_default_timezone_set('PRC');// use Monolog\Logger;// use Monolog\Handler\StdoutHandler;// Create the logger// $logger = new Logger('my_logger');// Now add some handlers// $logger->pushHandler(new StdoutHandler());$config = \Kafka\ProducerConfig::getInstance();$config->setMetadataRefreshIntervalMs(10000);$config->setMetadataBrokerList('127.0.0.1:9092');$config->setBrokerVersion('0.11.0.0');$config->setRequiredAck(1);$config->setIsAsyn(false);$config->setProduceInterval(500);$producer = new \Kafka\Producer();// $producer->setLogger($logger);for($i = 0; $i < 100; $i++) {  $result = $producer->send(array(    array(        'topic' => 'test1',        'value' => 'test1....message.',        'key' => 'key'.$i,    ),  ));  var_dump($result);}

這兩個生產者的代碼,可以用下列shell命令接收。

kafka-console-consumer --bootstrap-server localhost:9092 --topic test1 --from-beginning

消費者代碼

require 'vendor/autoload.php';date_default_timezone_set('PRC');// use Monolog\Logger;// use Monolog\Handler\StdoutHandler;// Create the logger// $logger = new Logger('my_logger');// Now add some handlers// $logger->pushHandler(new StdoutHandler());$config = \Kafka\ConsumerConfig::getInstance();$config->setMetadataRefreshIntervalMs(10000);$config->setMetadataBrokerList('127.0.0.1:9092');$config->setGroupId('test');$config->setBrokerVersion('0.11.0.0');$config->setTopics(array('test1'));//$config->setOffsetReset('earliest');$consumer = new \Kafka\Consumer();//$consumer->setLogger($logger);$consumer->start(function($topic, $part, $message) {    var_dump($message);});

這個消費者代碼,可以通過下面的shell命令發送資料。

kafka-console-producer --broker-list localhost:9092 --topic test1

值得特殊說明的是,這個消費者的代碼,在網頁裡面執行也是可以的。頁面會即時顯示相關資料。估計php端是個無限長的endless狀態。

當然,大家要記得開啟zookeeper和kafka,才能做這些實驗。相關kafka的安裝問題,請點擊這裡查看。https://newsn.net/tag/kafka/ 。

本文中涉及的類庫地址是:https://github.com/weiboad/kafka-php 。這個開源類庫,似乎是國人作品,所以有個中文文檔。見這裡。https://github.com/weiboad/kafka-php/blob/master/README_CH.md 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.