Example #1
0
 /**
  * \Kafka\ProducerConnect::CreateCached(...)
  *
  * @param  string           $connectionString
  * @param  int              $compression
  * @param  Partitioner      $partitioner
  * @param  float            $apiVersion
  * @param  int              $connectorTtl = 60
  * @throws \Kafka\Exception
  */
 public static function CreateCached($connectionString, $compression = \Kafka\Kafka::COMPRESSION_NONE, Partitioner $partitioner = null, $apiVersion = 0.7, $connectorTtl = 60)
 {
     $cacheFile = sys_get_temp_dir() . "/kafka-connector-{$apiVersion}-" . md5(serialize($connectionString));
     if (!file_exists($cacheFile) || time() - filemtime($cacheFile) > $connectorTtl) {
         //create new connector and so redisover topics and brokers
         $connector = \Kafka\ProducerConnector::Create($connectionString);
         //and cache for another minute
         file_put_contents($cacheFile, serialize($connector));
     } else {
         $connector = unserialize(file_get_contents($cacheFile));
     }
     $connector->compression = $compression;
     if ($partitioner === null) {
         $partitioner = new \Kafka\Partitioner();
     } elseif (!$partitioner instanceof \Kafka\Partitioner) {
         throw new \Kafka\Exception("partitioner must be instance of Partitioner class");
     }
     $connector->partitioner = $partitioner;
     return $connector;
 }
Example #2
0
<?php

// bootstrap
require dirname(__FILE__) . "/../src/Kafka/Kafka.php";
require dirname(__FILE__) . "/../src/Kafka/V07/Metadata.php";
$p = \Kafka\ProducerConnector::Create('hq-mharis-d02:2181');
while (true) {
    sleep(2);
    try {
        $p->addMessage('test', 'hello');
        $p->addMessage('test', 'world');
        sleep(2);
        $p->produce();
        echo "Produced 2 messages for test\n";
    } catch (\Kafka\Exception\TopicUnavailable $e) {
        echo "Failed to produce " . $e->getMessage() . "\n";
    }
}