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 如果KStream#进程执行所有数据库操作并转发给下一个使用者并最终写入主题,则只需维护一次语义_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 如果KStream#进程执行所有数据库操作并转发给下一个使用者并最终写入主题,则只需维护一次语义

Apache kafka 如果KStream#进程执行所有数据库操作并转发给下一个使用者并最终写入主题,则只需维护一次语义,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我想在外部数据库中执行所有有状态操作,而不是RocksDB,并且要在需要任何有状态操作的地方执行该操作,我正在编写自定义处理器,该处理器将执行DB操作和上下文#forward方法将键值对witten转发给下游消费者,并最终写入主题。Kafka Streams启用仅在卡夫卡主题中使用一次语义 对于写入外部系统-数据库,您没有这样的保证 以下场景是可能的: 自定义处理器获取消息并执行对外部系统(DB)的写入 发生了一些致命错误-未在源主题中进行偏移量提交,未向下游传递任何记录 应用程序已重新启动 相

我想在外部数据库中执行所有有状态操作,而不是RocksDB,并且要在需要任何有状态操作的地方执行该操作,我正在编写自定义处理器,该处理器将执行DB操作和上下文#forward方法将键值对witten转发给下游消费者,并最终写入主题。

Kafka Streams启用仅在卡夫卡主题中使用一次语义

对于写入外部系统-数据库,您没有这样的保证

以下场景是可能的:

  • 自定义处理器获取消息并执行对外部系统(DB)的写入
  • 发生了一些致命错误-未在源主题中进行偏移量提交,未向下游传递任何记录
  • 应用程序已重新启动
  • 相同的消息由自定义处理器处理:相同的消息写入外部系统(DB)并传递给下游,然后执行提交
  • 在描述的场景中:

    • 外部系统(DB)-获取相同消息两次

    • 整个卡夫卡只有一次成功

    若要将消息写入外部系统(DB),最好使用(.1),可以使用Kafka Streams完全处理消息,而不是使用Kafka Connect将数据从输出主题复制到数据库

    更多关于您可以找到的确切语义的信息:

    • Matthias J.Sax在卡夫卡峰会上的演讲:
    • 王国章在合流页面的博客帖子:
    • Neha Narkhede在合流页面的博客帖子:

    如果在应用程序重新启动的情况下,自定义处理器在写入DB时两次处理同一消息,那么这应该不会有问题。@AmbrishTiwari,我认为如果您对每条消息都这样做,性能会很低。Kafka Connect会对外部系统进行批量写入。如果您确实需要使用Kafka Streams y进行批量写入OU应该考虑使用<代码>标点符号>代码>外部存储会有问题,因为外部存储在错误的情况下不能回滚。因此,一次完全不支持外部存储。只是一个想法——卡夫卡事务性API可以用DB事务扩展到链吗?我不知道什么是性能IM。契约将是。@aishwaryakumar,你所说的DB事务链是什么意思?分布式事务?这肯定会影响性能和复杂性。