Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 为什么可以';增加session.timeout.ms?_Apache Kafka - Fatal编程技术网

Apache kafka 为什么可以';增加session.timeout.ms?

Apache kafka 为什么可以';增加session.timeout.ms?,apache-kafka,Apache Kafka,我想增加session.timeout.ms以允许更长的时间来处理poll()调用之间收到的消息。但是,当我将session.timeout.ms更改为大于30000的值时,它无法创建使用者对象并抛出以下错误 谁能告诉我为什么不能增加session.timeout.ms值,或者我是否缺少什么 0 [main] INFO org.apache.kafka.clients.consumer.ConsumerConfig - ConsumerConfig values: request.

我想增加
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中的异常: 无法在上构造kafka使用者 org.apache.kafka.clients.consumer.KafkaConsumer.(KafkaConsumer.java:624) 在 org.apache.kafka.clients.consumer.KafkaConsumer.(KafkaConsumer.java:518) 在 org.apache.kafka.clients.consumer.KafkaConsumer.(KafkaConsumer.java:500)


使用者会话超时的范围由代理
group.max.session.timeout.ms
(默认30s)和
group.min.session.timeout.ms
(默认6s)控制


您应该首先在代理端增加group.max.session.timeout.ms,否则您将得到“会话超时不在可接受的范围内”

更改会话.timeout.ms时需要记住这些条件:

  • server.properties>
    consumer.properties中的group.max.session.timeout.ms
  • server.properties中的group.min.session.timeout.ms,consumer.properties中的session.timeout.ms
  • request.timeout.ms
    session.timeout.ms
    +
    fetch.wait.max.ms
  • session.timeout.ms
    )/3>
    heartbeat.interval.ms
  • session.timeout.ms
    >每次消费者调查消费者记录的最坏情况处理时间(ms)

  • 我用的是弹簧卡夫卡

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

    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")));
    

    虽然此问题的其他答案正确地描述了错误以及如何增加会话.timeout.ms,但有一种更好更直接的方法来实现最初的目标:

    允许更长的时间来处理
    poll()
    调用之间收到的消息

    在现代卡夫卡版本中实现这一点的最佳方法是直接将消费者配置中的
    max.poll.interval.ms
    设置为更高的值

    当今大多数当代客户端库都基于librdkafka,它有一个发送心跳的后台线程。本文档将会话.timeout.ms描述为:

    客户端组会话和故障检测超时。消费者发送周期性的心跳(heartbeat.interval.ms),以向代理指示其活动性。如果代理在会话超时内未收到组成员的红心,则代理将从组中删除消费者并触发重新平衡

    其中as
    max.poll.interval.ms
    (默认为300000ms或5分钟)描述为:k

    高级使用者使用消息(例如,
    rd_kafka_consumer_poll()
    )的调用之间允许的最长时间。如果超过此间隔,则使用者将被视为失败,组将重新平衡,以便将分区重新分配给另一个使用者组成员。警告:此时可能无法进行偏移提交。注意:建议为长时间处理应用程序设置
    enable.auto.offset.store=false
    ,然后在消息处理后显式存储偏移(使用
    offsets\u store()
    ),以确保在处理完成之前不会自动提交偏移。间隔每秒检查两次。有关更多信息,请参阅

    心跳支持(KIP-62)在版本0.10.1中添加到Kafka。这比增加
    session.timeout.ms
    更好的原因是代理可以区分消费者客户端完全消失(例如崩溃、网络中断)和长处理时间。在前一种情况下,经纪人可以更快地重新平衡到另一个消费者。

    问题解决了。我在connect-avro-standalone.properties中添加了以下配置

    group.id=mygroup
    consumer.max.poll.records=1000

    您可以发布整个错误堆栈吗?此处没有足够的详细信息提供帮助。请点击此链接,谢谢,但在config/server.properties中添加/setting group.max.session.timeout.ms=3600000仍然无法解决此问题。但是,现在我遇到了“由以下原因引起的”错误:org.apache.kafka.common.config.ConfigException:request.timeout.ms应大于session.timeout.ms和fetch.max.wait.ms”,这是很有帮助的。在将request.timeout.ms设置为大于session.timeout.ms的值后,在最后一个点左右,这起到了作用,最坏情况下的处理时间是否为
    max.poll.interval.ms
    ?为什么这很重要?后台线程不是用来保持会话活动的吗?我已经设置了request.timeout.ms>session.timeout.ms,其值为request.timeout.ms=25000,session.timeout.ms=20000,问题已经解决