Apache kafka 卡夫卡消费群体

Apache kafka 卡夫卡消费群体,apache-kafka,spring-kafka,Apache Kafka,Spring Kafka,我在使用卡夫卡时遇到了一些问题。非常感谢您的帮助! 我在docker swarm中有zookeeper和kafka群集3个节点。您可以在下面看到Kafka broker配置 KAFKA_DEFAULT_REPLICATION_FACTOR: 3 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 KAFKA_MIN_INSYNC_REPLICAS: 2 KAFKA_NUM_PARTITIONS: 8 KAFKA_REPLICA_SOCKET_T

我在使用卡夫卡时遇到了一些问题。非常感谢您的帮助! 我在docker swarm中有zookeeper和kafka群集3个节点。您可以在下面看到Kafka broker配置

  KAFKA_DEFAULT_REPLICATION_FACTOR: 3
  KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
  KAFKA_MIN_INSYNC_REPLICAS: 2
  KAFKA_NUM_PARTITIONS: 8
  KAFKA_REPLICA_SOCKET_TIMEOUT_MS: 30000
  KAFKA_REQUEST_TIMEOUT_MS: 30000
  KAFKA_COMPRESSION_TYPE: "gzip"
  KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
  KAFKA_HEAP_OPTS: "-Xmx768m -Xms768m -XX:MetaspaceSize=96m"
我的情况是:

  • 20位制作人不断向卡夫卡主题发送信息
  • 1x消费者读取和记录消息
  • 杀死kafka节点(docker容器停止),所以现在集群有2个kafka代理节点(第3个将自动启动并加入集群)
  • 消费者不再消费信息,因为它因重新平衡而离开了消费者群体
是否存在任何机制告知消费者在重新平衡后加入该集团

日志:


@Rostyslav每当消费者打电话阅读信息时,它都会打两个主要的电话

  • 民意测验
  • 承诺
  • Poll基本上是从kafka主题中获取记录,commit告诉kafka将其保存为已读消息,以便不再读取。虽然轮询几个参数起主要作用:

  • 最大投票记录
  • 最大轮询间隔
  • 仅供参考:变量名称根据python api确定

    因此,每当我们试图从消费者处读取消息时,它都会在每一个max_poll_interval_ms进行一次轮询调用,并且只有在处理所获取的记录(如max_poll_records中所定义)之后才会进行相同的调用。因此,无论何时,只要max_poll_inetrval_ms中没有处理max_poll_记录,我们就会得到错误


    为了克服这个问题,我们需要改变两个变量中的一个。更改最大轮询间隔可能会非常繁忙,因为有时处理某些记录可能需要更长的时间,有时处理较少的记录可能需要更长的时间。我总是建议玩max_poll_唱片来解决这个问题。这对我来说很有用。

    @Rostyslav每当消费者打电话来阅读信息时,它会打两个主要的电话

  • 民意测验
  • 承诺
  • Poll基本上是从kafka主题中获取记录,commit告诉kafka将其保存为已读消息,以便不再读取。虽然轮询几个参数起主要作用:

  • 最大投票记录
  • 最大轮询间隔
  • 仅供参考:变量名称根据python api确定

    因此,每当我们试图从消费者处读取消息时,它都会在每一个max_poll_interval_ms进行一次轮询调用,并且只有在处理所获取的记录(如max_poll_records中所定义)之后才会进行相同的调用。因此,无论何时,只要max_poll_inetrval_ms中没有处理max_poll_记录,我们就会得到错误


    为了克服这个问题,我们需要改变两个变量中的一个。更改最大轮询间隔可能会非常繁忙,因为有时处理某些记录可能需要更长的时间,有时处理较少的记录可能需要更长的时间。我总是建议玩max_poll_唱片来解决这个问题。这对我有效。

    增加max.poll.interval.ms值。由于在重新平衡期间无法轮询,您的最后一次心跳大于间隔值,因此集群认为您已死亡,并将您踢出。这是我的两分钱。但是如何猜出正确的间隔呢?当我需要增加它时,总是会出现这种情况。然后将它增加到一个非常高的值。“正常执行”期间对流程没有影响。至少,将其增加到再平衡操作所需的最大时间。但正如我所说,这只是一个猜测。。。也许您的问题来自其他方面谢谢,我将尝试增加max.poll.interval.ms值。由于在重新平衡期间无法轮询,您的最后一次心跳大于间隔值,因此集群认为您已死亡,并将您踢出。这是我的两分钱。但是如何猜出正确的间隔呢?当我需要增加它时,总是会出现这种情况。然后将它增加到一个非常高的值。“正常执行”期间对流程没有影响。至少,将其增加到再平衡操作所需的最大时间。但正如我所说,这只是一个猜测。。。也许你的问题来自其他方面谢谢,我会努力的
     INFO 1 --- [ | loggingGroup] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=kafka-consumer-0, groupId=loggingGroup] Attempt to heartbeat failed since group is rebalancing
     WARN 1 --- [ | loggingGroup] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=kafka-consumer-0, groupId=loggingGroup] This member will leave the group because consumer poll timeout has expired. This means the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time processing messages. You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.