【问题标题】:Kafka Streams Multiple Instance Design ImplicationsKafka Streams 多实例设计含义
【发布时间】:2018-08-24 08:54:19
【问题描述】:

问题:在单个 JVM 中拥有 org.apache.kafka.streams.KafkaStreams 类的多个实例意味着什么(例如:内存、CPU 使用率、并发问题)?

背景:我正在尝试提供一种隔板机制,以便如果流操作引发异常,它不会将整个KafkaStreams 实例转换为ERROR 状态。我将应用程序划分为不同的KafkaStreams 实例,每个实例负责不同的任务(日志记录、外部网络调用、数据库调用等)。

我找不到有关如何 (1) 从 ERROR 状态恢复 KafkaStreams 实例或 (2) 使用 KafkaStreams 设计提供一些隔板原则的应用程序的文档或 (3) Justify或反驳我目前的做法。

如果我的方法违反了 Confluent 或 Kafka 记录在案的最佳实践,那么了解这一点也会很有帮助。

应用程序版本:Kafka 1.0.0、Kafka-streams 1.0.0

【问题讨论】:

    标签: apache-kafka apache-kafka-streams confluent-platform


    【解决方案1】:

    如果KafkaStreams 实例最终处于ERROR 状态,您需要close() 并创建一个新实例,您可以开始替换旧实例。

    对于在单个 JVM 中运行多个 KafkaStreams 实例:这基本上没问题。请注意,如果这些实例属于同一个应用程序,您需要为它们配置不同的状态目录以相互隔离。否则,它们会自动相互隔离。

    对我来说,你的设计很有意义。但请注意,因为 KafkaConsumerKafkaProducer 无法为您设置共享,所以它会占用更多资源。

    【讨论】:

    • 感谢您提供有关状态的说明!如果您有任何参考资料,我希望看到 Confluent 提供的有关错误处理和恢复的某种文档:)
    • 我想我们没有任何具体的文档。请发送电子邮件至 docs@confluent.io 并为此提出建议 :) 我们依靠用户反馈来不断改进我们的文档,非常感谢反馈!
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2018-08-25
    • 2021-06-07
    相关资源
    最近更新 更多