【问题标题】:kafka upgrade to .9 with new consumer api使用新的消费者 api 升级到 .9
【发布时间】:2016-06-24 02:23:17
【问题描述】:

我们正在将我们的 kafka 实现升级到 .9 并使用新的消费者 java api 来创建消费者。我正在为消费者使用下面的代码,我们正在使用将主题设置为消费者,如 LINE A 和 LINE B 是对我们服务的调用它处理我们收到的消息。现在的问题是,如果我们的消息处理时间超过 30 秒,我们就会得到 Exception。

    Properties props = new Properties();
            props.put("bootstrap.servers", "localhost:9092");
            props.put("group.id", "test-group");
            props.put("auto.offset.reset", "earliest");
            props.put("heartbeat.interval.ms", "1000");
            props.put("receive.buffer.bytes", 10485760);
            props.put("fetch.message.max.bytes", 5242880);
            props.put("enable.auto.commit", false);
    //with partition assigned to consumer


            KafkaConsumer<Object, Object> consumer = new KafkaConsumer<>(props);
           // TopicPartition partition0 = new TopicPartition("TEST-TOPIC", 0);
            //consumer.assign(Arrays.asList(partition0));
            //assign topic to consumer without partition
//LINE A
            consumer.subscribe(Arrays.asList("TEST-TOPIC"), new ConsumerRebalanceListenerImp());
            List<ConsumerRecord<String, String>> buffer = new ArrayList<>();
            while (true) {
                try {
                    ConsumerRecords<Object, Object> records = consumer.poll(1000);
                    consumeFromQueue(records);//LINE B
                    consumer.commitSync();

                } catch (CommitFailedException e) {
                    e.printStackTrace();
                    System.out.println("CommitFailedException");
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("Exception in while consuming messages");
                }

例外是

2016-03-03 10:47:35.095 INFO 6448 --- [ask-scheduler-3] o.a.k.c.c.internals.AbstractCoordinator :将协调器 2147483647 标记为死亡。 2016-03-03 10:47:35.096 错误 6448 --- [ask-scheduler-3] o.a.k.c.c.internals.ConsumerCoordinator:为组 TEST-GROUP 提交偏移量时发生错误 ILLEGAL_GENERATION 提交失败异常 org.apache.kafka.clients.consumer.CommitFailedException:由于组重新平衡,提交无法完成 在 org.apache.kafka.clients.consumer.internals.ConsumerCoordinator$OffsetCommitResponseHandler.handle(ConsumerCoordinator.java:552) 在 org.apache.kafka.clients.consumer.internals.ConsumerCoordinator$OffsetCommitResponseHandler.handle(ConsumerCoordinator.java:493) 在 org.apache.kafka.clients.consumer.internals.AbstractCoordinator$CoordinatorResponseHandler.onSuccess(AbstractCoordinator.java:665) 在 org.apache.kafka.clients.consumer.internals.AbstractCoordinator$CoordinatorResponseHandler.onSuccess(AbstractCoordinator.java:644) 在 org.apache.kafka.clients.consumer.internals.RequestFuture$1.onSuccess(RequestFuture.java:167) 在 org.apache.kafka.clients.consumer.internals.RequestFuture.fireSuccess(RequestFuture.java:133) 在 org.apache.kafka.clients.consumer.internals.RequestFuture.complete(RequestFuture.java:107) 在 org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient$RequestFutureCompletionHandler.onComplete(ConsumerNetworkClient.java:380) 在 org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:274) 在 org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.clientPoll(ConsumerNetworkClient.java:320) 在 org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:213)

提交偏移量时出现上述异常。 任何建议都会有所帮助,谢谢

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    您可以通过设置来限制 poll() 返回的消息数量

    max.partition.fetch.bytes
    

    到某个合适的阈值,该阈值大于您的最大消息,但太低以至于您每次投票获得的消息更少。

    Kafka 0.10.x 支持通过设置显式限制返回给客户端的消息数量

    max.poll.records
    

    【讨论】:

      【解决方案2】:

      发生这种情况是因为新的消费者是单线程的,它可以与消费者组保持心跳的唯一方法是轮询或提交偏移量,30 秒后组协调器将您的消费者标记为死亡并调用进行组再平衡。 对于这种情况,您可以增加request.timeout.ms 或将消费和处理的工作分摊到 2 个线程之间。

      【讨论】:

      • 感谢回复,我尝试将“request.timeout.ms”添加到 70000,即使消息处理需要 30000,它也给了我同样的异常。
      • 不知道为什么它没有生效。我什至尝试将“session.timeout.ms”设置为 70000,但它给了我异常说“org.apache.kafka.common.errors.ApiException:会话超时不在可接受的范围内。”我在考虑您的第二个建议,但是如果在处理线程时出现问题,我将如何处理?将其作为新消息再次添加到主题并恢复异常之前由消息引起的更改?
      • 同时增加 group.max.session.timeout.ms
      • 尝试设置它。没有任何影响日志如下:- 2016-03-10 16:43:26.339 WARN 10376 --- [ask-scheduler-4] Oakclients.consumer.ConsumerConfig :配置 group.max.session.timeout.ms =提供了 40000 但不是已知配置。 2016-03-10 16:43:26.341 INFO 10376 --- [ask-scheduler-3] Oakafka.common.utils.AppInfoParser:Kafka 版本:0.9.0.1 2016-03-10 16:43:26.342 INFO 10376 - -- [ask-scheduler-3] Oakafka.common.utils.AppInfoParser : Kafka commitId : 23c69d62a0cabf06
      • 需要在server.properties文件中设置,请看kafka.apache.org/documentation.html
      猜你喜欢
      • 2016-08-31
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2018-04-22
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多