Kafka Java 组消费者标记为已死亡
Kafka Java consumer marked as dead for group
我正在使用 Java 消费者来消费来自主题(kafka 版本 0.10.0.1)的消息,如果我 运行 它们在 docker 容器之外,它工作正常。但是,当我在 docker 容器中执行它们时,这些组将被标记为死消息
Marking the coordinator local.kafka.com:9092 (id: 2147483647 rack: null) dead for group my-group
我的消费配置如下:-
metadata.max.age.ms = 300000
partition.assignment.strategy =[org.apache.kafka.clients.consumer.RangeAssignor]
reconnect.backoff.ms = 50
sasl.kerberos.ticket.renew.window.factor = 0.8
max.partition.fetch.bytes = 1048576
bootstrap.servers = [192.168.115.128:9092, 192.168.115.128:9093]
ssl.keystore.type = JKS
enable.auto.commit = true
sasl.mechanism = GSSAPI
interceptor.classes = null
exclude.internal.topics = true
ssl.truststore.password = null
client.id = consumer-1
ssl.endpoint.identification.algorithm = null
max.poll.records = 2147483647
check.crcs = true
request.timeout.ms = 40000
heartbeat.interval.ms = 3000
auto.commit.interval.ms = 5000
receive.buffer.bytes = 65536
ssl.truststore.type = JKS
ssl.truststore.location = null
ssl.keystore.password = null
fetch.min.bytes = 1
send.buffer.bytes = 131072
value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
group.id = my-group
retry.backoff.ms = 100
sasl.kerberos.kinit.cmd = /usr/bin/kinit
sasl.kerberos.service.name = null
sasl.kerberos.ticket.renew.jitter = 0.05
ssl.trustmanager.algorithm = PKIX
ssl.key.password = null
fetch.max.wait.ms = 500
sasl.kerberos.min.time.before.relogin = 60000
connections.max.idle.ms = 540000
session.timeout.ms = 30000
metrics.num.samples = 2
key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
ssl.protocol = TLS
ssl.provider = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.keystore.location = null
ssl.cipher.suites = null
security.protocol = PLAINTEXT
ssl.keymanager.algorithm = SunX509
metrics.sample.window.ms = 30000
auto.offset.reset = earliest
auto.commit
属性设置为false
,poll.timeout
设置为10000
。有人可以指出我错在哪里吗?
这可能是您的 advertised.listener(经纪人配置)或缺少 advertised.listener 在您的消费者中从 boostrap.servers 第一次发现调用后向消费者传递不正确的 URL。
这可能会导致消费者对其余的 RPC 调用使用不正确的 URL。
简而言之,这意味着代理消费者之间的通信不活跃 - 在 AbstractConsumer
中连接终止。
对我在 Spark 流中的实际实现的引用。
在应用程序中,我们的批次最多可以持续五分钟,因此我们在这些设置下调整了 Kafka 属性:
"heartbeat.interval.ms" -> "30000"
"session.timeout.ms" -> "90000"
"request.timeout.ms" -> "120000"
对于间隔,这是原始默认值的五倍,在 documentation 中据说适合半分钟批处理;请注意,您必须考虑极长的批次(滞后的批次)。
其他两个只是比那个大,因为 Kafka 需要这样。
相关配置为:
spark.streaming.kafka.consumer.poll.ms
关于这个,将它设置得相当小,比如十秒可能是有意义的,因为如果出现问题,那么一个具有大量 Spark 任务重试的设置:
spark.task.maxFailures
将涵盖此内容。
我一直觉得 KafkaSpark 的配置令人望而生畏,尤其是在 Kafka 端。
经验法则始终是:使用默认值,仅在绝对需要时覆盖。
我正在使用 Java 消费者来消费来自主题(kafka 版本 0.10.0.1)的消息,如果我 运行 它们在 docker 容器之外,它工作正常。但是,当我在 docker 容器中执行它们时,这些组将被标记为死消息
Marking the coordinator local.kafka.com:9092 (id: 2147483647 rack: null) dead for group my-group
我的消费配置如下:-
metadata.max.age.ms = 300000
partition.assignment.strategy =[org.apache.kafka.clients.consumer.RangeAssignor]
reconnect.backoff.ms = 50
sasl.kerberos.ticket.renew.window.factor = 0.8
max.partition.fetch.bytes = 1048576
bootstrap.servers = [192.168.115.128:9092, 192.168.115.128:9093]
ssl.keystore.type = JKS
enable.auto.commit = true
sasl.mechanism = GSSAPI
interceptor.classes = null
exclude.internal.topics = true
ssl.truststore.password = null
client.id = consumer-1
ssl.endpoint.identification.algorithm = null
max.poll.records = 2147483647
check.crcs = true
request.timeout.ms = 40000
heartbeat.interval.ms = 3000
auto.commit.interval.ms = 5000
receive.buffer.bytes = 65536
ssl.truststore.type = JKS
ssl.truststore.location = null
ssl.keystore.password = null
fetch.min.bytes = 1
send.buffer.bytes = 131072
value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
group.id = my-group
retry.backoff.ms = 100
sasl.kerberos.kinit.cmd = /usr/bin/kinit
sasl.kerberos.service.name = null
sasl.kerberos.ticket.renew.jitter = 0.05
ssl.trustmanager.algorithm = PKIX
ssl.key.password = null
fetch.max.wait.ms = 500
sasl.kerberos.min.time.before.relogin = 60000
connections.max.idle.ms = 540000
session.timeout.ms = 30000
metrics.num.samples = 2
key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
ssl.protocol = TLS
ssl.provider = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.keystore.location = null
ssl.cipher.suites = null
security.protocol = PLAINTEXT
ssl.keymanager.algorithm = SunX509
metrics.sample.window.ms = 30000
auto.offset.reset = earliest
auto.commit
属性设置为false
,poll.timeout
设置为10000
。有人可以指出我错在哪里吗?
这可能是您的 advertised.listener(经纪人配置)或缺少 advertised.listener 在您的消费者中从 boostrap.servers 第一次发现调用后向消费者传递不正确的 URL。
这可能会导致消费者对其余的 RPC 调用使用不正确的 URL。
简而言之,这意味着代理消费者之间的通信不活跃 - 在 AbstractConsumer
中连接终止。
对我在 Spark 流中的实际实现的引用。
在应用程序中,我们的批次最多可以持续五分钟,因此我们在这些设置下调整了 Kafka 属性:
"heartbeat.interval.ms" -> "30000"
"session.timeout.ms" -> "90000"
"request.timeout.ms" -> "120000"
对于间隔,这是原始默认值的五倍,在 documentation 中据说适合半分钟批处理;请注意,您必须考虑极长的批次(滞后的批次)。
其他两个只是比那个大,因为 Kafka 需要这样。
相关配置为:
spark.streaming.kafka.consumer.poll.ms
关于这个,将它设置得相当小,比如十秒可能是有意义的,因为如果出现问题,那么一个具有大量 Spark 任务重试的设置:
spark.task.maxFailures
将涵盖此内容。
我一直觉得 KafkaSpark 的配置令人望而生畏,尤其是在 Kafka 端。
经验法则始终是:使用默认值,仅在绝对需要时覆盖。