Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 卡夫卡——消费者的阅读量正好占了一半_Regex_Apache Kafka_Hadoop Streaming_Kafka Consumer Api - Fatal编程技术网

Regex 卡夫卡——消费者的阅读量正好占了一半

Regex 卡夫卡——消费者的阅读量正好占了一半,regex,apache-kafka,hadoop-streaming,kafka-consumer-api,Regex,Apache Kafka,Hadoop Streaming,Kafka Consumer Api,我使用下面的代码来读取我的主题数据,即“sha-test2”,但它读取的是完全不同的代码行,即20行中的10行。 但当我运行console时,它会显示所有20行。 即。bin/kafka-console-consumer.sh——zookeeper本地主机:2181——主题sha-test2——从头开始 我怎么了?非常感谢你的帮助 public class KafkaTestConsumer extends Thread { //final static String clientId

我使用下面的代码来读取我的主题数据,即“sha-test2”,但它读取的是完全不同的代码行,即20行中的10行。 但当我运行console时,它会显示所有20行。 即。bin/kafka-console-consumer.sh——zookeeper本地主机:2181——主题sha-test2——从头开始

我怎么了?非常感谢你的帮助

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
公共类KafkaTestConsumer扩展线程{
//最终静态字符串clientId=“SimpleConsumerDemoClient”;
最终静态字符串TOPIC=“sha-test2”;
消费者连接器消费者连接器;
公共静态void main(字符串[]argv)抛出
不支持的编码异常{
KafkaTestConsumer helloKafkaConsumer=新的KafkaTestConsumer();
helloKafkaConsumer.start();
}
公共KafkaTestConsumer(){
属性=新属性();
properties.put(“zookeeper.connect”,“172.23.32.35:2181”);
properties.put(“group.id”、“testgroup”);
ConsumerConfig ConsumerConfig=新的ConsumerConfig(属性);
消费者连接器=
Consumer.createJavaConsumerConnector(consumerConfig);
}
@凌驾
公开募捐{
Map topicCountMap=新HashMap();
topicCountMap.put(主题,新整数(1));
映射用户映射=
consumerConnector.createMessageStreams(topicCountMap);
KafkaStream stream=consumerMap.get(主题).get(0);
System.out.println(“consumerMap:\n”+consumerMap.toString());
ConsumerIterator it=stream.iterator();
System.out.println(“运行已启动”);
while(it.hasNext()){
System.out.println(新字符串(it.next().message());
}
}
非常感谢。
~Shyam

问题出在这一行:

topicCountMap.put(TOPIC, new Integer(1));
您告诉
consumerConnector
为主题创建单个使用者线程,但主题(显然)有两个分区。
测试组中的使用者线程数
group应等于或大于分区数,否则组将无法读取某些分区,这正是您的情况

请看一看,其中线程数是通过命令行参数设置的


或者,您可以在
/brokers/topics/your\u topic\u name/partitions
节点下,从Zookeeper读取存储元数据的分区的确切数量。

问题出在这一行:

topicCountMap.put(TOPIC, new Integer(1));
您告诉
consumerConnector
为主题创建单个使用者线程,但主题(显然)有两个分区。
测试组中的使用者线程数
group应等于或大于分区数,否则组将无法读取某些分区,这正是您的情况

请看一看,其中线程数是通过命令行参数设置的


或者,您可以在
/brokers/topics/your_topic\u name/partitions
节点下从Zookeeper读取存储元数据的分区的确切数量。

您的代码看起来非常好。这看起来像是偏移量问题。高级消费者将其偏移量存储在Zookeeper中

在您的情况下,可能会发生以下情况:- 1.你在卡夫卡上放了10条信息 2.您运行了消费者代码,它成功读取了所有10条消息。此外,消费者在zookeeper中将消费的偏移量更新为10。 3.你阻止你的消费者。 4.你又给卡夫卡发了10条短信 5.您再次启动消费者代码。它只读取最后10条消息,而不是之前推送的10条消息,因为当您重新启动消费者代码时,它将检查zookeeper以确定从哪个偏移量恢复消费

尝试使用不同的组id重新运行您的消费者,或者在从zookeeper删除偏移量后重试。这应该可以正常工作

 properties.put("group.id","test-group420");

您的代码看起来非常好。这看起来像是偏移量问题。高级使用者将其偏移量存储在zookeeper中

在您的情况下,可能会发生以下情况:- 1.你在卡夫卡上放了10条信息 2.您运行了消费者代码,它成功读取了所有10条消息。此外,消费者在zookeeper中将消费的偏移量更新为10。 3.你阻止你的消费者。 4.你又给卡夫卡发了10条短信 5.您再次启动消费者代码。它只读取最后10条消息,而不是之前推送的10条消息,因为当您重新启动消费者代码时,它将检查zookeeper以确定从哪个偏移量恢复消费

尝试使用不同的组id重新运行您的消费者,或者在从zookeeper删除偏移量后重试。这应该可以正常工作

 properties.put("group.id","test-group420");