<?php require 'autoloader.php'; $data = array('required_ack' => 1, 'timeout' => 1000, 'data' => array(array('topic_name' => 'test', 'partitions' => array(array('partition_id' => 0, 'offset' => 34, 'max_bytes' => 1024))))); $conn = new \Kafka\Socket('192.168.1.115', '9092'); $conn->connect(); $encoder = new \Kafka\Protocol\Encoder($conn); $encoder->fetchRequest($data); $decoder = new \Kafka\Protocol\Decoder($conn); $topic = $decoder->fetchResponse(); foreach ($topic as $topic_name => $partition) { foreach ($partition as $partId => $messageSet) { var_dump($partition->getHighOffset()); foreach ($messageSet as $message) { var_dump((string) $message); } } }
/** * fetch message to broker * * @access public * @return void */ public function fetch() { $data = $this->_formatPayload(); if (empty($data)) { return false; } $responseData = array(); $streams = array(); foreach ($data as $host => $requestData) { $connArr = $this->client->getStream($host); $conn = $connArr['stream']; $encoder = new \Kafka\Protocol\Encoder($conn); $encoder->fetchRequest($requestData); $streams[$connArr['key']] = $conn; } $fetch = new \Kafka\Protocol\Fetch\Topic($streams, $data); // register fetch helper $freeStream = new \Kafka\Protocol\Fetch\Helper\FreeStream($this->client); $freeStream->setStreams($streams); \Kafka\Protocol\Fetch\Helper\Helper::registerHelper('freeStream', $freeStream); // register partition commit offset $commitOffset = new \Kafka\Protocol\Fetch\Helper\CommitOffset($this->client); $commitOffset->setGroup($this->group); \Kafka\Protocol\Fetch\Helper\Helper::registerHelper('commitOffset', $commitOffset); return $fetch; }
/** * testFetchRequest * * @access public * @return void */ public function testFetchRequest() { $encoder = new \Kafka\Protocol\Encoder($this->stream); $data = array(); try { $encoder->fetchRequest($data); } catch (\Kafka\Exception\Protocol $e) { $this->assertSame('given fetch kafka data invalid. `data` is undefined.', $e->getMessage()); } $data = array('data' => array(array('topic_name' => 'debug', 'partitions' => array(array('partition_id' => 1))))); $len = $encoder->fetchRequest($data); $this->assertEquals('0000003e000100000000000000096b61666b612d706870ffffffff000000640001000000000001000564656275670000000100000001000000000000000006400000', $this->getData($len)); }