当前位置: 首页 > 知识库问答 >
问题:

消费者在所有复制品向领导者kafka确认之前收到消息

苏波涛
2023-03-14

假设主题分区的高水印是1000和领导者,所有追随者副本都有完全相同的消息。在此场景中,生产者发送一条带有acks=all的消息,使用者正在使用此主题。这里是否存在这样一种可能性,即消费者提取请求将在其他副本提取请求之前得到服务?

这是因为在我们的设置中,在acks=all情况下,消费者在关注者之前收到了一条消息。

共有1个答案

邓翼
2023-03-14

在Kafka中,消息添加到leader broker后就可以被使用,但是如果设置acks=allleader将等待所有同步副本复制消息。

通常情况下,主题的所有副本都是同步副本,除非在复制过程中出现问题。(如果某些副本不同步,即使设置acks=all,如果有足够的副本(min.insync.replicas),您仍可以继续生成消息)

min.insync.replicas:当生产者将ACK设置为“全部”(或“-1”)时,min.insync.replicas指定必须确认写入的副本的最小数量,以便将写入视为成功。如果不能满足此最小值,则生成器将引发异常(NotEnoughReplicas或NotEnoughReplicasAfterAppend)。

在您的情况下,如果设置acks=all,似乎没有办法绕过复制过程。但如果不想等待复制进程,可以设置acks=1。使用此配置,在leader将消息写入本地日志后,用户就可以使用该消息。(followers也会复制消息,但leader不会等待它们)但您应该考虑使用此配置可能会丢失数据的风险。

ACKS=1这将意味着领导者将记录写入其本地日志,但将在不等待所有追随者的完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后立即失败,但在追随者复制它之前,记录将丢失

 类似资料:
  • 我正在使用以下在docker上运行kafka、zookeeper和kafdrop: 我有一个具有以下配置的Spring Boot Producer应用程序-: 在我的中,我有以下内容: 这是一个单独的应用程序,我在我的服务中这样称呼Kafka制作人: 在一个完全不同的spring引导应用程序中,我有一个像这样的使用者: 我可以看到消费者正在连接到代理,但是有消息的日志。下面是我能看到的完整日志:

  • 我正在为Kafka0.9.0.0做Kafka快速入门。 我让zookeeper在监听,因为我运行了 只有一个代理在处侦听,因为我运行了 我有一个制作人在主题“测试”上发帖,因为我跑了 当我运行旧的API使用者时,它通过运行 但是,当我运行新的API使用者时,我在运行时没有得到任何东西 是否可以使用新的API从控制台使用者订阅主题?我该怎么修好它?

  • 我们有一个制作人 在开发过程中,我重新部署了producer应用程序,并做了一些更改。但在此之后,我的消费者没有收到任何消息。我尝试重新启动消费者,但没有成功。问题可能是什么和/或如何解决? 消费者配置: 生产者配置: 编辑2: 5分钟后,消费者应用程序死亡,但以下情况除外:

  • Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka

  • 我是Kafka的新手。我在网上读了很多关于Kafka制作人和Kafka消费者的说明。我成功地实现了前者,它可以向Kafka集群发送消息。然而,我没有完成后一个。请帮我解决这个问题。我看到我的问题像StackOverflow上的一些帖子,但我想更清楚地描述一下。我在虚拟盒子的Ubuntu服务器上运行Kafka和Zookeeper。使用1个Kafka集群和1个Zookeeper集群的最简单配置(几乎是

  • 为了使用Kafka通用地发布消息,我使用类名作为主题: 服务器属性(我从默认属性中唯一更改的内容): 注意:我还尝试了以下用户设置: