php在kafka写数据,php发送数据到kafka实现代码

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。这些在代码中都是要用到的。

c121ab9a18105b9c75fcb03521e75e30.png

0bcc50f3eb0bf78483a2cd5e4f32252e.png

生产者代码(异步)<?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 。

相关推荐:

linux下php扩展kafka的实例分享

使用 PHP 编写的 Kafka 客户端

kafka装配及Kafka-PHP扩展的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值