/** * \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; }
<?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"; } }