至少一次语义:如果生产者从Kafka代理接收到确认(ack),并且acks=all,则表示消息已准确写入Kafka主题一次。但是,如果生产者确认超时或收到错误,它可能会在假定消息未写入Kafka主题的情况下重试发送消息。如果代理在发送ack之前失败,但在消息成功写入Kafka主题之后失败,则此重试会导致消息被写入两次,并因此多次传递给最终使用者。
我知道时间戳是根据消息从生产者发送的时间设置的。如果生产者执行重试,两条消息是否具有相同的时间戳?
默认情况下,在创建记录时设置时间戳。所以,是的,如果生产者执行重试,重复的具有相同的时间戳。
如果您将message.timestamp.type
设置为LogAppendTime
,则重复项将具有不同的时间戳,每个记录的时间戳将是代理将其附加到日志的有效时间。
我有两个Kafka制作人向具有多个分区的同一主题发送消息。 正如预期的那样,来自同一生产者PR1的具有相同密钥K1的消息总是转到同一分区PA1。 问题是来自另一个生产者PR2的具有相同密钥K1的消息转到另一个分区PA2,而我希望它们也转到PA1。 Kafka不是在制片人之间保留分区分配吗? 是否与两个生产者使用不同的Kafka客户端库有关? 如果我设置两个制作人使用相同的id,会有帮助吗?
根据生产者配置,有:重试和max.in.flight.requests.per.connection.假设重试 在主题的一个分区中,消息是否可以无序到达(例如,如果第一条消息有重试次数,但是第二条消息在第一次尝试时被传递给代理)? 或者乱序只发生在主题的几个分区之间,但在分区内顺序被保留?
在发布之前,我们使用合流模式注册表来验证我们的avro模式。我有两个问题, 生产者在产生多个消息时是否多次调用架构注册表? 如果是,是HTTP/HTTPS调用吗?
有以下消费者代码: 然后我用脚本生成消息: 问题是,当我将消费者作为两个不同的进程启动时,我会在每个进程中收到新消息。但是,我希望它只发送给一个消费者,而不是广播。 在Kafka的文献中(https://kafka.apache.org/documentation.html)其中写道: 如果所有使用者实例都具有相同的使用者组,则其工作原理就像在使用者之间平衡负载的传统队列一样。 我发现这些消费者的
问题内容: 我尝试将机器人抓取器的位置映射到抓取器所握持的物体所施加的阻力。我预订了一个主题的抓取器位置,又订阅了另一个主题的阻力值,因为我想确保抓取器位置与该位置的确切阻力值相对应。鉴于两者都是浮动消息,如何同步它们? 问题答案: 您可以在中使用。 这是一个订阅多个主题以同时获取数据的示例: 如果您的问题没有解决,则不是: 阅读更多
我正在使用Spring Boot中的。Java 8 我的主要目的是,消费者不应重复使用信息。 1)调用表获取100行并将其发送到kafka 2) 假设我处理了70行(我得到了成功确认),然后Kafka宕机了(Kafka在RETRY机制计时内无法恢复) 因此,当我重新启动Spring启动应用程序时,我如何确保不再发送这70条消息。 一种选择是我可以在数据库表消息 中使用标志。 还有其他有效的方法吗?