一、安装以及使用shell命令终端操作kafka
环境配置
1、下载最新版本的kafka: kafka_2.11-1.0.0.tgz
http://mirrors.shu.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz
2、配置,解压后进入config目录
2.1、配置zookeeper.properties
默认监听端口2181
2.2、配置server.properties
开启监听端口,比如监听本地
listeners=PLAINTEXT://10.168.1.99:9092
3、启动
3.1、启动zookeeper
./bin/zookeeper-server-start.sh config/zookeeper.properties
3.2、启动server
./bin/kafka-server-start.sh config/server.properties
此处启动server时报错内存不足,解决方案要么加大系统内存,要么调小kafka需求内存
我这是调小kafka启动所需内存大小
vim kafka-server-start.sh
把其中:export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
改为:export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M"
4、启动测试的消费者,并监听topic的test
./bin/kafka-console-consumer.sh --zookeeper 10.168.1.99:2181 --topic test --from-beginning
5、启动测试的生产者,并监听topic的test
./bin/kafka-console-producer.sh --broker-list 10.168.1.99:9092 --topic test
此时,在生产者中输入数据后回车后,在消费者终端可以看到生产者产生的信息
二、使用PHP操作kafka
1、安装kafka的扩展php-rdkafka
1.1、在安装php-rdkafka之前,需要先安装librdkafka
git clone http://github.com/edenhill/librdkafka.git
./configure
make && make install
1.2、安装php-rdkafka
git clone http://github.com/arnaud-lb/php-rdkafka.git
cd php-rdkafka
phpize
./configure
make && make install
2、编写kafka生产者和消费者类
<?php/** * Kafka.php. * User: lvfk * Date: 2018/2/7 0007 * Time: 11:04 * Desc: Kafka服务 */namespace app/models;use yii/base/InvalidConfigException;html' target='_blank'>class Kafka{ public $broker_list = '10.168.1.99:9092';//配置kafka,可以用逗号隔开多个kafka public $topic = 'topic'; public $partition = 0; protected $producer = null; protected $consumer = null; public function __construct() { if (empty($this->broker_list)) { throw new InvalidConfigException("broker not config"); } $rk = new /RdKafka/Producer(); if (empty($rk)) { throw new InvalidConfigException("producer error"); } $rk->setLogLevel(LOG_DEBUG); if (!$rk->addBrokers($this->broker_list)) { throw new InvalidConfigException("producer error"); } $this->producer = $rk; } /** * 生产者 * @param array $messages * @return mixed */ public function send($messages = []) { $topic = $this->producer->newTopic($this->topic); return $topic->produce(RD_KAFKA_PARTITION_UA, $this->partition, json_encode($messages)); } /** * 消费者 */ public function consumer($object, $callback){ $conf = new /RdKafka/Conf(); $conf->set('group.id', 0); $conf->set('metadata.broker.list', $this->broker_list); $topicConf = new /RdKafka/TopicConf(); $topicConf->set('auto.offset.reset', 'smallest'); $conf->setDefaultTopicConf($topicConf); $consumer = new /RdKafka/KafkaConsumer($conf); $consumer->subscribe([$this->topic]); echo "waiting for messages...../n"; while(true) { $message = $consumer->consume(120*1000); switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: echo "message payload...."; $object->$callback($message->payload); break; } sleep(1); } }}
3、配置
//配置kafka生产者'asyncLog' => [ 'class' => '//app//models//Kafka', 'broker_list' => '10.168.1.99:9092', 'topic' => 'asynclog']
4、在业务代码中生产消息
/Yii::$app->asyncLog->send(['this is IndexController,'.date('y-md H:i:s',time())]);
5、在yii的command中消费
5.1、编写KafkaController.php
<?php/** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */namespace app/commands;use yii/console/Controller;/** * This command echoes the first argument that you have entered. * * This command is provided as an example for you to learn how to create console commands. * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */class KafkaController extends Controller{ /** * This command echoes what you have entered as the message. * @param string $message the message to be echoed. */ public function actionConsume() { /Yii::$app->asyncLog->consumer($this, 'callback'); } public function callback($message) { /Yii::info($message, 'testkafka'); /Yii::$app->log->setflushInterval(1); }}
5.2、运行:
./yii kafka/consume
6、当第4步中生产数据后,在第5步的终端可以消费数据
相关推荐:
php发送数据到kafka实现代码
linux下php扩展kafka的实例分享
以上就是php kafka使用 的详细内容,更多请关注 其它相关文章!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答