我即将编写一个用于发布和使用kafka消息的原型。 我们已经建立了Cloudera基础设施(动物园管理员,经纪人等),我已经成功地使用了Kafka命令行工具来制作和使用消息。
我使用[org.apache.kafka/kafka_2.10 "0.8.2.1"]
作为依赖项,并且已经能够使用客户端API来设置KafkaProducer
,该KafkaConsumer
发布具有纯字符串内容的消息,并且可以通过命令成功读取 - 在另一边排队消费者。
我的问题是:internets上是否有一个代码示例来说明如何初始化org.apache.kafka.clients.consumer.ConsumerConfig
,并在另一方面阅读该消息,因为我已经搜索了好几天并且code examples似乎都没有工作:
createJavaConsumerConnector
的构造函数,但不存在这样的构造函数; kafka.consumer.Consumer
上调用curl http://{myhost}/{indexName}/_stats
静态方法...这些东西存在于哪个Universe中?)。通常每个例子看起来都非常复杂。我希望消息传递框架需要几行配置来连接到代理,还有一些函数可以放入队列或主题。为Kafka设置Producer并不是非常复杂,而且我期待消费者与之相似。
我似乎也是not alone。
答案 0 :(得分:2)
首先,我要提一下,Kafka 0.8.0
,0.8.1
和0.8.2
之间有一些API更改(0.9.0
的市长重写和简化和0.10.0
) - 因此,您的问题有点开放,只是要求0.8
。
要为0.8.2.2
编写Java使用者,您需要包含依赖项:
这适用于Scala 2.11 - 还有其他Scala版本。
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.8.2.2</version>
</dependency>
不要将 kafka-clients
用作0.8.x的artifactId。
消费者接收<String,String>
键值对消息并将其打印到stdout
的最小示例如下所示:
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
public class ConsumerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("zookeeper.connect", "localhost:2181");
props.put("group.id", "myGroup");
final String topic = "test";
ConsumerConnector consumer = Consumer.createJavaConsumerConnector(new ConsumerConfig(props));
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, new Integer(1)); // number of consumer threads
KafkaStream<byte[], byte[]> stream = consumer.createMessageStreams(topicCountMap).get(topic).get(0);
ConsumerIterator<byte[], byte[]> it = stream.iterator();
// infinite loop
while(it.hasNext()) {
System.out.println(new String(it.next().message()));
}
// non-reachable code...
consumer.shutdown();
}
}
完整示例 - 使用多个消费者线程,包括正确关闭 - 可以在此处找到:https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example
要对此进行测试,请按照quickstart指南,通过Kafka的 console-producer 发送消息。