kafka_php_消费者_生产者--小记

这篇博客展示了如何使用PHP与Kafka进行交互,包括创建消费者和生产者。消费者代码中设置了组别ID、Kafka服务器地址,并订阅了主题'heima',在接收到消息后进行处理并提交位移。生产者代码则配置了消息确认级别,并向主题'heima'发送消息。
摘要由CSDN通过智能技术生成

此处是kafka消费者代码:

<?php
$conf = new Rdkafka\Conf();
        $conf->set('group.id', 0); // 设置组别id, 默认写0
        $conf->set('metadata.broker.list', 'localhost:9092'); // 设置kafka地址及端口号   localhost可换成服>务器ip
        $topicConf = new Rdkafka\topicConf();
        $topicConf->set('auto.offset.reset', 'smallest');
        //$topicConf->set('auto.offset.reset', 'latest');


        // 设置自动提交为false
        $conf->set('enable.auto.commit', 'false');


        $conf->setDefaultTopicConf($topicConf);

        $consumer = new Rdkafka\kafkaConsumer($conf);

        $consumer->subscribe(['heima']); //订阅

        echo "wating for message....\n";

        while(true) {
             // 消费数据,阻塞1秒(1秒内有数据就消费,没有数据等待1秒进入下一轮循环)
             $message = $consumer->consume(1000);
           switch ($message->err) {
                case RD_KAFKA_RESP_ERR_NO_ERROR:
                    echo '要处理消息了~~~';
                    $messageInfo = $message->payload;
                    echo $messageInfo."\n";

                    // 提交位移
                    $consumer->commit($message);

                    break;
            }
        }

 

 

此处是kafka生产者代码

<?php
$conf = new RdKafka\Conf();
$tk = new RdKafka\Producer($conf);
// $tk->setLogLevel(LOG_DEBUG);
$tk->addBrokers("localhost:9092"); // 绑定kafka  localhost可换成自己的服务器ip

$cf = new RdKafka\TopicConf();
//0:这意味着生产者producer不等待来自broker同步完成的确认继续发送下一条(批)消息。此选项提供最低的延迟但最弱的耐久性保证(当服务器发生故障时某些数据会丢失,如leader已死,但producer并不知情,发出去的信息broker就收不到)。

//1:这意味着producer在leader已成功收到的数据并得到确认后发送下一条message。此选项提供了更好的耐久性为客户等待服务器确认请求成功(被写入死亡leader但尚未复制将失去了唯一的消息)。

//-1:这意味着producer在follower副本确认接收到数据后才算一次发送完成。 此选项提供最好的耐久性,我们保证没有信息将丢失,只要至少一个同步副本保持存活
$cf->set('request.required.acks', -1);
$topic = $tk->newTopic('heima',$cf); // 绑定topic

$msg = empty($_GET['msg']) ? 'empty' : $_GET['msg'];
//for($i=0;$i<10;$i++){
//      $result = $topic->produce(RD_KAFKA_PARTITION_UA, 0, $msg.$i);
//}
$result = $topic->produce(RD_KAFKA_PARTITION_UA, 0, time()); // 发送消息给kafka服务器


 $tk->flush(300);
 sleep(1);

$tk->poll(300);


var_dump($result);
echo 'done';

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小两

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值