为什么我不能增加session.timeout.ms?

qmelpv7a  于 2021-06-08  发布在  Kafka
关注(0)|答案(5)|浏览(376)

我想增加 session.timeout.ms 允许更长的时间来处理在 poll() 电话。但是当我改变的时候 session.timeout.ms 如果值大于30000,则无法创建使用者对象并抛出以下错误。
谁能告诉我为什么不能增加 session.timeout.ms 价值还是我遗漏了什么?

0    [main] INFO  org.apache.kafka.clients.consumer.ConsumerConfig  - ConsumerConfig values: 

request.timeout.ms = 40000
check.crcs = true
retry.backoff.ms = 100
ssl.truststore.password = null
ssl.keymanager.algorithm = SunX509
receive.buffer.bytes = 262144
ssl.cipher.suites = null
ssl.key.password = null
sasl.kerberos.ticket.renew.jitter = 0.05
ssl.provider = null
sasl.kerberos.service.name = null
session.timeout.ms = 40000
sasl.kerberos.ticket.renew.window.factor = 0.8
bootstrap.servers = [server-name:9092]
client.id = 
fetch.max.wait.ms = 500
fetch.min.bytes = 50000
key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
sasl.kerberos.kinit.cmd = /usr/bin/kinit
auto.offset.reset = latest
value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
partition.assignment.strategy = [org.apache.kafka.clients.consumer.RangeAssignor]
ssl.endpoint.identification.algorithm = null
max.partition.fetch.bytes = 2097152
ssl.keystore.location = null
ssl.truststore.location = null
ssl.keystore.password = null
metrics.sample.window.ms = 30000
metadata.max.age.ms = 300000
security.protocol = PLAINTEXT
auto.commit.interval.ms = 5000
ssl.protocol = TLS
sasl.kerberos.min.time.before.relogin = 60000
connections.max.idle.ms = 540000
ssl.trustmanager.algorithm = PKIX
group.id = test7
enable.auto.commit = false
metric.reporters = []
ssl.truststore.type = JKS
send.buffer.bytes = 131072
reconnect.backoff.ms = 50
metrics.num.samples = 2
ssl.keystore.type = JKS
heartbeat.interval.ms = 3000

线程“main”org.apache.kafka.common.kafkaexception中出现异常:未能在org.apache.kafka.clients.consumer.kafkaconsumer上构造kafka使用者。(kafkaconsumer)。java:624)在org.apache.kafka.clients.consumer.kafkaconsumer。java:518)在org.apache.kafka.clients.consumer.kafkaconsumer。java:500)

wsewodh2

wsewodh21#

这些条件需要牢记在心才能改变 session.timeout.ms : group.max.session.timeout.ms 在server.properties> session.timeout.ms 在consumer.properties中。 group.min.session.timeout.ms 在server.properties中 session.timeout.ms 在consumer.properties中。 request.timeout.ms > session.timeout.ms + fetch.wait.max.ms ( session.timeout.ms )/3 >
heartbeat.interval.ms session.timeout.ms >每个消费者投票的消费者记录的最坏情况处理时间(毫秒)。

1yjd4xko

1yjd4xko2#

如何在kafka connect api中设置max.poll.records
事情解决了。我在connect-avro-standalone.properties中添加了以下配置
group.id=mygroup consumer.max.poll.records=1000

qhhrdooz

qhhrdooz3#

我用的是SpringKafka
我添加了以下配置,但消费者仍未启动:

buildProperties.put(ConsumerConfig.FETCH_MIN_BYTES_CONFIG, env.getProperty("kafka.user-events-min-bytes"));
    buildProperties.put(ConsumerConfig.FETCH_MAX_WAIT_MS_CONFIG, env.getProperty("kafka.user-events-wait-time-ms") );
    buildProperties.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, env.getProperty("kafka.user-events-wait-time-ms") );
    buildProperties.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, env.getProperty("kafka.user-events-request-timeout-ms"));
    buildProperties.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, env.getProperty("kafka.user-events-wait-time-ms"));

我发现它失败了,因为poll.timeout是1000;添加以下配置帮助:

factory.getContainerProperties().setPollTimeout(Integer.parseInt(env.getProperty("kafka.user-events-wait-time-ms")));
oxosxuxt

oxosxuxt4#

使用者会话超时的范围由代理控制 group.max.session.timeout.ms (默认30秒)和 group.min.session.timeout.ms (默认为6s)。
您应该首先在代理端增加group.max.session.timeout.ms,否则您将得到“会话超时不在可接受的范围内”。

gzszwxb4

gzszwxb45#

而这个问题的其他答案正确地描述了错误以及如何增加错误 session.timeout.ms ,有一种更好更直接的方法来实现最初的目标:
允许更长的时间来处理在 poll() 电话
在现代Kafka版本中实现这一点的最好方法是直接设置 max.poll.interval.ms 在消费者配置中增加一个更高的值。
现在大多数现代客户端库都基于librdkafka,它有一个发送心跳的后台线程。librdkafka配置文档描述 session.timeout.ms 作为:
客户端组会话和故障检测超时。消费者发送周期性的心跳信号(heartbeat.interval.ms)以向代理指示其活跃度。如果代理在会话超时时间内未收到组成员的红心,则代理将从组中移除使用者并触发重新平衡。
作为 max.poll.interval.ms (默认为30000ms,或5分钟)描述为:k
使用消息的两次呼叫之间允许的最长时间(例如。, rd_kafka_consumer_poll() )面向高端消费者。如果超过此间隔,则认为使用者失败,组将重新平衡,以便将分区重新分配给另一个使用者组成员。警告:此时可能无法进行偏移提交。注:建议设置 enable.auto.offset.store=false 对于长时间处理应用程序,然后显式存储偏移量(使用 offsets_store() )在消息处理之后,确保在处理完成之前不会自动提交偏移量。间隔每秒检查两次。详见kip-62。
在版本0.10.1中,kafka增加了心跳支持(kip-62)。原因是这比增加 session.timeout.ms 代理可以区分完全消失的客户机(如崩溃、网络中断)和长处理时间。在前一种情况下,经纪人可以更快地重新平衡到另一个消费者。

相关问题