public function addTopic($name, array $conf)
 {
     $producer = new \RdKafka\Producer();
     $producer->addBrokers(implode(',', $conf['brokers']));
     $producerTopicConf = new \RdKafka\TopicConf();
     $producerTopic = $producer->newTopic($name, $producerTopicConf);
     $consumer = new \RdKafka\Consumer();
     $consumer->addBrokers(implode(',', $conf['brokers']));
     $consumerTopicConf = new \RdKafka\TopicConf();
     $consumerTopicConf->set("auto.commit.interval.ms", 1000.0);
     $consumerTopicConf->set("offset.store.sync.interval.ms", 60000.0);
     $consumerTopic = $consumer->newTopic($name, $consumerTopicConf);
     $topic = new Topic($name, $producer, $producerTopic, $consumer, $consumerTopic);
     $this->topics[$name] = $topic;
 }
Beispiel #2
0
<?php

$rk = new RdKafka\Consumer();
$rk->setLogLevel(LOG_DEBUG);
$rk->addBrokers("127.0.0.1");
$topic = $rk->newTopic("test1");
$topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING);
while (true) {
    $msg = $topic->consume(0, 1000);
    if ($msg->err) {
        echo $msg->errstr(), "\n";
        break;
    } else {
        echo $msg->payload, "\n";
    }
}
Beispiel #3
0
$brokers = array();
foreach ($ids as $id) {
    $path = $brokersPath . "/{$id}";
    $val = $zk->get($path);
    $val = json_decode($val, true);
    $brokers[] = $val['host'] . ":" . $val['port'];
}
$brokersAddr = implode(',', $brokers);
//begin to consume
$conf = new RdKafka\Conf();
// Set the group id. This is required when storing offsets on the broker
$conf->set('group.id', 'my-alarm-group');
$conf->set('broker.version.fallback', '0.8.2.2');
// socket请求的超时时间。实际的超时时间为max.fetch.wait + socket.timeout.ms。
$conf->set('socket.timeout.ms', '400');
$consumer = new RdKafka\Consumer($conf);
$consumer->addBrokers($brokersAddr);
$consumer->setLogLevel(LOG_DEBUG);
$topicConf = new RdKafka\TopicConf();
$topicConf->set('auto.commit.interval.ms', 1000);
// Set the offset store method to 'file'
$topicConf->set('offset.store.method', 'file');
$topicConf->set('offset.store.path', sys_get_temp_dir());
//$topicConf->set('api.version.request', true);
//$topicConf->set('broker.version.fallback', '0.8.2.2');
// Alternatively, set the offset store method to 'broker'
// $topicConf->set('offset.store.method', 'broker');
// Set where to start consuming messages when there is no initial offset in
// offset store or the desired offset is out of range.
// 'smallest': start from the beginning
$topicConf->set('auto.offset.reset', 'largest');
Beispiel #4
0
 /**
  * Create a new rdkafka consumer
  * @return \RdKafka\Consumer
  */
 protected function createConsumer()
 {
     $rdKafkaConsumer = new \RdKafka\Consumer();
     $rdKafkaConsumer->addBrokers(implode(",", $this->brokers));
     return $rdKafkaConsumer;
 }