Kafka客户端2.2消费时,partition中reassign非leader replica导致分区的consumer主动退出

M.s ALl 发表于: 2021-09-28   最后更新时间: 2021-09-28 17:53:45   1,317 游览

集群是2.2.1
kafka 客户端配置如下

[Executor task launch worker for task 49] INFO consumer.ConsumerConfig: ConsumerConfig values: 
    auto.commit.interval.ms = 5000
    auto.offset.reset = none
    bootstrap.servers = [略]
    check.crcs = true
    client.dns.lookup = default
    client.id = 
    connections.max.idle.ms = 540000
    default.api.timeout.ms = 60000
    enable.auto.commit = false
    exclude.internal.topics = true
    fetch.max.bytes = 52428800
    fetch.max.wait.ms = 500
    fetch.min.bytes = 1
    group.id = 123456
    heartbeat.interval.ms = 3000
    interceptor.classes = []
    internal.leave.group.on.close = true
    isolation.level = read_uncommitted
    key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
    max.partition.fetch.bytes = 1048576
    max.poll.interval.ms = 300000
    max.poll.records = 500
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
    receive.buffer.bytes = 65536
    reconnect.backoff.max.ms = 1000
    reconnect.backoff.ms = 50
    request.timeout.ms = 30000
    retry.backoff.ms = 100
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    session.timeout.ms = 10000

在消费时,迁移例如某topic partition30中非leader节点

报错

User class threw exception: org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition topic-30 could be determined

达到三次后,这个 consumer 会向 group send 离开的请求,然后出发group reblance

现在初步怀疑是迁移导致的客户端 session 断连,然后客户端等待一个 max.poll.interval.ms 的时间内发生了此问题,也希望大佬来帮忙定位一下。

想请问一下

  1. 为何迁移非leader replica 会发生kafka.common.errors.TimeoutException
  2. 同时这种请况下调小max.poll.interval.ms,是否能够在后期isr扩张时不会再触发这个问题
  3. 有没有什么配置和方式能够避免这个问题
发表于 2021-09-28
添加评论

推测是建立在你本来集群一切正常的前提下。

我觉得是因为迁移导致你的资源被占满了,而影响了客户端。
建议你关注一下资源的占用情况,必要时对迁移进行限流。
参见:kafka在数据迁移期间限制带宽的使用

M.s ALl -> 半兽人 3年前

如果是资源有问题的话,理论上至少同一磁盘下所有leader 都会存在大量的reblance,而且我还迁移的是普通副本应该不影响。去看coordinator的日志reblance 基本上局限在这个topic partition。请问一下消费客户端有什么参数是能敏感察觉到isr信息的吗

半兽人 -> M.s ALl 3年前

如果针对isr的话,影响的是以下2个配置参数:

我们让节点满足这2个“同步”条件,以区分“活着”还是“故障”。leader跟踪“同步”节点。如果一个follower死掉,卡住,或落后,leader将从同步副本列表中移除它。落后是通过replica.lag.max.messages配置控制,卡住是通过replica.lag.time.max.ms配置控制的。

具体文章:kafka副本和leader选举

但是我依然会聚焦“超时”这个错误,而引起这个错误的我能想到的就是上面说的。

你的答案

查看kafka相关的其他问题或提一个您自己的问题