内容简介:Kafka 消息偏移量的维护
Kafka是大数据领域常用的消息队列,其高效的吞吐量和分布式容错等特性是其收到青睐的重要原因。
kafka消息的位置
用好Kafka,维护其消息偏移量对于避免消息的重复消费与遗漏消费,确保消息的Exactly-once是至关重要的。
kafka的消息所在的位置Topic、Partitions、Offsets三个因素决定。
Kafka消费者消费的消息位置还与consumer的group.id有关。
consumerOffsets与earlieastLeaderOffsets的关系
名称 | 含义 |
---|---|
earlieastLeaderOffsets | 存储在broker上的leader节点的最早的消息偏移量 |
consumerOffsets | 消费者消费的消息偏移量位置 |
为了表述方便,我们记earlieastLeaderOffsets为A,记consumerOffsets为B 。
- 情况一:正常情况下,消费的消息偏移量应该大于broker上存储的最早的消息偏移量,即 A < B:
我们知道,存储在broker上的kafka的消息常设置消息过期配置,当到达过期时间时过期的消息将会被清除。
情况二:如果A 依然小于 B,则仍可以正常消费:
情况三:然而,当 A > B 时,则说明还没有被消费的消息已经被清除:
此种情况会抛出kafka.common.OffsetOutOfRangeException
异常。
consumerOffsets 小于 earlieastLeaderOffsets的影响与解决办法
当情况三发生时,在(B,A)区间内的消息还没有被消费就已经被清除了,将导致两个后果。
1. 消息丢失。
2. 抛出 kafka.common.OffsetOutOfRangeException
异常。
在对消息完整性有严格要求的系统中,消息的丢失造成的影响会比较严重,所以在这种情况下,要保证消息不会遭到丢失。
避免消息丢失包含两个方面:
- 还没有被消费过的消息不会被清除。
在没有外部系统清除kafka消息的情况下,协调设置broker的最大保留大小log.retention.bytes
和 最大保留时间log.retention.hours
等,来配合消费者端的读取消息。可以通过读取和监控消费者消费的offsets,来保证消息不会被意外清除。 - 消费者端消费消息没有遗漏。
当消费者意外中断时,重新启动消费时能够从上一次中断的消息偏移量开始消费。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
标签: kafka 消息偏移量的维护
猜你喜欢:- 记一次Access偏移注入
- ios – reloadRowsAtIndexPaths时保持偏移量
- Spark Streaming 之 Kafka 偏移量管理
- php-rdkafka手动提交偏移量
- 人品爆发:偏移注入与移位溢注的联合使用
- bug诞生记——隐蔽的指针偏移计算导致的数据错乱
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ASP.NET 4 in C# and Vb
Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99
This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!