我正在使用以下代码来读取我的主题数据,即“sha-test2”,但它正在读取完全替代的代码行,即20行中的10行。 但是当我运行控制台时,它显示所有20行。 即bin / kafka-console-consumer.sh --zookeeper localhost:2181 --topic sha-test2 - from-beginning
我错了什么?非常感谢您的帮助。
public class KafkaTestConsumer extends Thread {
//final static String clientId = "SimpleConsumerDemoClient";
final static String TOPIC = "sha-test2";
ConsumerConnector consumerConnector;
public static void main(String[] argv) throws
UnsupportedEncodingException {
KafkaTestConsumer helloKafkaConsumer = new KafkaTestConsumer();
helloKafkaConsumer.start();
}
public KafkaTestConsumer(){
Properties properties = new Properties();
properties.put("zookeeper.connect","172.23.32.35:2181");
properties.put("group.id","test-group");
ConsumerConfig consumerConfig = new ConsumerConfig(properties);
consumerConnector =
Consumer.createJavaConsumerConnector(consumerConfig);
}
@Override
public void run() {
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(TOPIC, new Integer(1));
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap =
consumerConnector.createMessageStreams(topicCountMap);
KafkaStream<byte[], byte[]> stream = consumerMap.get(TOPIC).get(0);
System.out.println("consumerMap : \n " + consumerMap.toString() );
ConsumerIterator<byte[], byte[]> it = stream.iterator();
System.out.println("run started");
while(it.hasNext()){
System.out.println(new String(it.next().message()));
}
}
Thank you.
~Shyam
答案 0 :(得分:2)
问题出在这一行:
topicCountMap.put(TOPIC, new Integer(1));
您告诉consumerConnector
为您的主题创建单个使用者线程,但主题(显然)有两个分区。 "test-group"
组中的消费者线程数应该等于或大于分区数,否则某些分区不会被该组读取,这正是您的情况。
请查看this example,其中线程数是通过命令行参数设置的。
或者,您可以在/brokers/topics/your_topic_name/partitions
节点下读取存储元数据的Zookeeper的确切分区数。
答案 1 :(得分:0)
您的代码看起来非常好。这看起来像一个抵消问题。高级消费者将其抵消存储在动物园管理员中。
在你的情况下,这可能发生了: - 你在卡夫卡中放了10条消息 你运行了消费者代码,它成功地读取了所有10条消息。此外,消费者还在zookeeper中将消耗的偏移量更新为10。 你阻止你的消费者。 你又向卡夫卡发了10条消息 5.您再次启动消费者代码。它只读取最后10条消息而不是之前推送的10条消息,因为当您重新启动消费者时,它将检查zookeeper以找出从哪个偏移量恢复消费。
尝试使用不同的组ID重新运行您的使用者,或者在从zookeeper删除偏移后尝试。它应该工作正常。
properties.put("group.id","test-group420");