kafka 測試遇到掉資料的問題 nmred/kafka-PHP

happywho250發表於2019-12-17

kafka-php 測試遇到掉資料的問題

遇到的現象

現象1.當消費者程式未啟動時 生產者進行生產一條資料   待消費Lag為1 LOG-END-OFFSET-CURRENT-OFFSET=1
|GROUP|TOPIC|PARTITION|CURRENT-OFFSET|LOG-END-OFFSET|LAG| CONSUMER-ID|HOST|CLIENT-ID|
|--|--|--|--|--|--|--|--|--|
|test888|test888|0|25|26| 1| kafka-php-2078a3fb-17de-487a-bb09-290d3e4b124c|/127.0.0.1| kafka-php|

現象2. 啟動生產者 不見消費資料的列印  但是CURRENT-OFFSET=LOG-END-OFFSET  顯示已經消費了
現象3. 如果消費者程式先開啟  再進行生產  不會出現2的情況   一切進展正常 

生產者

$topic = "test888";
        $key = '';
        // 建立kafka資料
        $config = ProducerConfig::getInstance();
        $config->setMetadataRefreshIntervalMs(10000);
        $config->setMetadataBrokerList('127.0.0.1:9092');
        $config->setBrokerVersion('1.0.0');

        /**
         * 生產者生產訊息是否需要等待broker
         * 0 表示producer不需要等待來著broker同步完成的確認繼續傳送下一條訊息 擁有最低的延遲性   但是資料可能會掉
         * 1 表示producer在leader成功接收訊息且在成功確認後傳送下一條message
         * -1 表示producer在follower副本確認接收到訊息後 才算傳送完成.
         */
        $config->setRequiredAck(-1); // 是否需要ack回報.
        $config->setIsAsyn(true); // 是否非同步.
        $config->setProduceInterval(500);

        $producer = new Producer();

//        for($i=1;$i<=100;$i++) {
            $result = $producer->send([
                [
                    'topic' => $topic,
                    'value' =>json_encode(array('time' => date('Y-m-d H:i:s'))),
                    'key' => '',
                ],
            ]);
            echo "生產訊息推入test佇列:\n";
            var_dump($result);
//        }

消費者

 // 該主題對應的分割槽是多少個  就可以指定<=分割槽數的消費者佇列個數.  使用supervisor管理
        $groupId = 'test888';
        $topic = ["test888"];
        // kafka消費者
        $config = ConsumerConfig::getInstance();
        $config->setMetadataRefreshIntervalMs(10000);
        $config->setMetadataBrokerList('127.0.0.1:9092');
        $config->setGroupId($groupId);
        $config->setBrokerVersion('1.0.0');
        $config->setTopics($topic);
        $config->setOffsetReset('earliest');
        var_dump($config->getOffsetReset());

        $consumer = new Consumer();
        $consumer->start(function ($topic,$part,$message) {
            echo "執行消費:".date('Y-m-d H:i:s')."\n";
            var_dump($message);
        })
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章