如果我正在运行一个包含更多分区的Kafka集群,那么我的单个消费者组就会有消费者.是否有对邮件订购或跨分区按时交付邮件的保证?
简单示例:
2个分区,1个消费者
生产者通过密钥控制分区分配.
消息1进入并进入分区
消息2进入并进入分区B
消息3进入并进入分区A
我知道消息1将在消息3之前消耗,因为它们位于同一个分区中.但是消息2呢?它会在消息3之前或之后消耗吗?或者它会变化吗?可能在消息1之前消费吗?
如果新的消息继续进入分区A并且生产比消费更快怎么办?消息2会无限期地位于分区B中吗?什么时候会消耗?有没有保证消息不会永远存在?
更一般地说:如果将消费者分配给多个分区,那么该消费者如何以及何时在这些分区之间交换?
Wil*_*ire 21
Kafka仅在分区内提供订购保证.在您的示例中,消息2可能在消息1之前,消息1之后或消息3之后消耗.这仅取决于使用者的性能.有关这方面的更多信息,请参阅文档:https://kafka.apache.org/documentation.html#introduction('Consumers'和'Guarantees'主题).
卡夫卡经纪人并不了解消费者.它将消息存储在日志段中,直到相应的日志段被删除.消费者可以随时附加到经纪人并从最旧的日志段开始消费.最短消息保留时间由两个配置属性控制:log.retention.hours和log.retention.bytes(每个主题可能的覆盖).更多相关文档:https://kafka.apache.org/documentation.html#brokerconfigs.
回答你的问题:如果消费者最终比生产者慢,那么它有一些时间赶上(默认为1周).如果没有,将永久删除一些未消费的消息.
高级使用者创建多个KafkaStream对象,每个对象提供来自一个或多个分区的数据.由您决定如何使用这些流:在单独的线程中,循环等等.还可以获取消息的时间戳并将流合并为单个流恢复消息顺序.
| 归档时间: |
|
| 查看次数: |
9141 次 |
| 最近记录: |