[英]Getting Timed out reading socket error for kafka cluster setup
我想為三個相似的應用程序(具有相同的隊列,如AppA-> {TopicX,TopicY,TopicZ},AppB-> {TopicX,TopicZ},AppC-> {TopicX,TopicY})設置kafka群集類型設置。 生產者和消費者將特定於應用程序。 我用三個具有不同端口的不同配置文件中的分區1,2,3的三個代理設置了kafka集群。 然后啟動kafka服務器(集群)
我正在使用http://github.com/nmred/kafka-php的 kafka php包裝器
所以我使用App A的Producer代碼
$producer->setRequireAck(-1);
$producer->setMessages("TopicX", 0, array(json_encode($this->data)));
$producer->send();
並且使用App B的生產者代碼,例如
$producer->setRequireAck(-1);
$producer->setMessages("TopicX", 1, array(json_encode($this->data)));
$producer->send();
等等。
然后,我為三個應用制作了Consumer腳本,例如
$queues = array("TopicX", "TopicY", "TopicZ");
while(true) {
foreach($queues as $queue) {
$consumer = \Kafka\Consumer::getInstance('localhost:2181');
$consumer->setGroup('testgroup');
$consumer->setPartition($queue, 0);
$result = $consumer->fetch();
}
}
但是,當我嘗試為任何應用執行使用者腳本時,都會收到類似
“在讀取750437字節和750323字節時讀取套接字超時”
我只是不知道如何解決此問題,我試圖修改一些kafka配置參數,例如
zookeeper.connection.timeout.ms=24000 # Initially 6000
replica.socket.timeout.ms=15000 # Not exists in default file
但這沒用。
您實際上是通過將其聲明為foreach周期來銷毀Kafka使用者,將其移出該循環,使用該循環設置分區,然后獲取結果並對源進行區分:
$queues = array("TopicX", "TopicY", "TopicZ");
$consumer = \Kafka\Consumer::getInstance('localhost:2181');
$consumer->setGroup('testgroup');
foreach($queues as $queue) {
$consumer->setPartition($queue, 0);
}
while(true) {
$result = $consumer->fetch();
foreach ($result as $topicName => $topic) {
foreach ($topic as $partId => $partition) {
var_dump($partition->getHighOffset());
foreach ($partition as $message) {
var_dump((string)$message);
}
}
}
}
請參閱kafka php項目的github自述文件,以查看示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.