php rdkafka实例,安装 php-rdkafka 扩展并使用 Kafka 记录日志

####################################################

# 生产者 producer.php

$max = 100;

$configBrokers = '127.0.0.1:9092';

$configTopic = 'test';

$conf = new \RdKafka\Conf();

// 注册发送消息事件

$conf->setDrMsgCb(function ($kafka, $message) {

var_dump('msg:', $kafka, $message);

});

// 注册错误发送的事件回调

$conf->setErrorCb(function ($kafka, $err, $reason) {

dump('error', $kafka, $err, $reason);

});

// 实例化生产者

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

$producer->addBrokers($configBrokers);

$configObj = new \RdKafka\TopicConf();

$topic = $producer->newTopic($configTopic, $configObj);

// 尝试发送几个消息, 这里注意,发送是异步的

for ($i = 0; $i < $max; ++ $i) {

// RD_KAFKA_PARTITION_UA 让 kafka 自由选择分区

$topic->produce(RD_KAFKA_PARTITION_UA, 0, "php send " . $i);

}

// 这里必须 poll 消息发送完毕

while (($len = $producer->getOutQLen()) > 0) {

$producer->poll(1);

}

####################################################

# 消费者 consumer.php

$configBrokers = '127.0.0.1:9092';

$configTopic = 'test';

$consumer = new \RdKafka\Consumer();

$consumer->addBrokers($configBrokers);

$topic = $consumer->newTopic($configTopic);

// 从上一次记录的偏移量消费

$topic->consumeStart(0, RD_KAFKA_OFFSET_END);

while (true) {

// 连接的超时时间, 如果常驻内存消费, 设置时间长点

$message = $topic->consume(0, 60*60);

switch ($message->err) {

case RD_KAFKA_RESP_ERR_NO_ERROR:

var_dump($message, Carbon::now()->toDateTimeString(), 'count:' . $count);

break;

case RD_KAFKA_RESP_ERR__PARTITION_EOF:

var_dump("No more messages; will wait for more\n");

break;

case RD_KAFKA_RESP_ERR__TIMED_OUT:

var_dump("Timed out\n");

break;

default:

var_dump('error', $message);

break;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值