2016-08-28 51 views
1

我正在使用java api實現apache kafka生產者。 Apache Kafka安裝在本地主機上。 Zookeeper也在運行,但仍然producer.send()函數停留在發送消息和消息未發佈。kafka java生產者卡在產生消息

我已經創建了「快速消息」主題。

以下是代碼。

package com.hsahu.kafka.producer; 

import java.util.Properties; 
import org.apache.kafka.clients.producer.KafkaProducer; 
import org.apache.kafka.clients.producer.ProducerRecord; 

public class KafkaProducerExample { 
public static void main(String[] args) { 

    Properties props = new Properties(); 

    props.put("bootstrap.servers", "localhost:9092"); 
    props.put("acks", "all"); 
    props.put("retries", 0); 
    props.put("batch.size", 16384); 
    props.put("linger.ms", 0); 
    props.put("buffer.memory", 33554432); 
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 

    KafkaProducer<String, String> producer = new KafkaProducer<>(props); 

    try { 
     producer.send(new ProducerRecord<String, String>("fast-messages", "This is a dummy message")); 
    } catch(Exception ex) { 
     System.out.println(ex); 
    } 

    System.out.println("message publisher"); 

    producer.close(); 
} 

}

我應該怎麼辦?是我的代碼錯誤或任何屬性設置不正確或丟失?

回答

2

代碼中沒有任何問題。只有api版本和kafka服務器版本不匹配。所以我只更正了api版本,現在製作人正在工作。

+0

我同意。我使用的是kafka客戶端0.10;然而,我的經紀人版本是0.9。我升級到.10,一切都很好。 –

1

測試下方

如果以上版本0.9則需要在經紀人CONFIG 「advertised.host.name」

0

你可以嘗試producer.flush()而不是producer.close()。 Flush()塊直到消息發送到卡夫卡經紀人?我沒有看到任何其他奇怪的東西。