【问题标题】:Kafka Stream Startup Issue - org.apache.kafka.streams.errors.LockExceptionKafka Stream 启动问题 - org.apache.kafka.streams.errors.LockException
【发布时间】:2017-09-13 15:29:18
【问题描述】:

我有一个 Kafka Streams 应用程序版本 - 0.11,它从几个主题中获取数据并将数据连接起来并将其放入另一个主题中。

卡夫卡配置:

5 kafka brokers - version 0.11
Kafka Topics - 15 partitions and 3 replication factor.

每小时消耗/产生几百万条记录。每当我关闭任何 kafka 代理时,它都会抛出异常:

org.apache.kafka.streams.errors.LockException: task [4_10] Failed to lock the state directory for task 4_10
    at org.apache.kafka.streams.processor.internals.ProcessorStateManager.<init>(ProcessorStateManager.java:99)
    at org.apache.kafka.streams.processor.internals.AbstractTask.<init>(AbstractTask.java:80)
    at org.apache.kafka.streams.processor.internals.StandbyTask.<init>(StandbyTask.java:62)
    at org.apache.kafka.streams.processor.internals.StreamThread.createStandbyTask(StreamThread.java:1325)
    at org.apache.kafka.streams.processor.internals.StreamThread.access$2400(StreamThread.java:73)
    at org.apache.kafka.streams.processor.internals.StreamThread$StandbyTaskCreator.createTask(StreamThread.java:313)
    at org.apache.kafka.streams.processor.internals.StreamThread$AbstractTaskCreator.retryWithBackoff(StreamThread.java:254)
    at org.apache.kafka.streams.processor.internals.StreamThread.addStandbyTasks(StreamThread.java:1366)
    at org.apache.kafka.streams.processor.internals.StreamThread.access$1200(StreamThread.java:73)
    at org.apache.kafka.streams.processor.internals.StreamThread$RebalanceListener.onPartitionsAssigned(StreamThread.java:185)
    at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.onJoinComplete(ConsumerCoordinator.java:265)
    at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.joinGroupIfNeeded(AbstractCoordinator.java:363)
    at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:310)
    at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:297)
    at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1078)
    at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1043)
    at org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:582)
    at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:553)
    at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:527)

我已经阅读了几个 jira 问题,清理流可能有助于解决问题。但是每次启动 Kafka 流应用程序时清理流是正确的解决方案还是补丁?还有,stream cleanUp 会延迟应用启动对吧?

注意:每次启动 Kafka Streams 应用程序时,是否需要在调用streams.start() 之前调用streams.cleanUp()

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-streams


    【解决方案1】:

    看到org.apache.kafka.streams.errors.LockException: task [4_10] Failed to lock the state directory for task 4_10 实际上是预期的,应该会自行解决。线程将退出以等待另一个线程释放锁并稍后重试。因此,您甚至可能会多次看到此 WARN 消息是日志,以防在第二个线程释放锁之前发生重试。

    但是,最终锁应该由第二个线程释放,第一个线程将能够获得锁。之后,Streams 应该继续前进。请注意,这是一条 WARN 消息,而不是错误。

    【讨论】:

    • 但解决此警告需要很长时间。是否有减少重试次数的配置。
    • 理想情况下,我应该在每次启动流实例时调用 cleanup() 吗?
    • 没有。你不应该!它会引入很多不必要的开销!比较文档中的“提示”框:docs.confluent.io/current/streams/…
    • 我不断收到上述异常,并且在过去 12 小时内处于上述状态。 2017-09-14 06:32:04 - [警告] [view-live-cb2c9b8b-4979-45bc-bf5d-51212242b67e-StreamThread-1] [org.apache.kafka.streams.processor.internals.StreamThread.retryWithBackoff: 283]:流线程 [view-live-cb2c9b8b-4979-45bc-bf5d-51212242b67e-StreamThread-1] 仍在重试创建任务:[2_3]
    • 有没有办法解决这个问题。看起来第二个线程没有释放锁,因此第一个线程无法获得该状态目录的锁。请帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2015-02-07
    • 2022-01-13
    相关资源
    最近更新 更多