问题描述
书雪小说网 https://www.3692.info通过Service Bus Explorer工具,查看到Event Hub的属性值,从而产生的问题及讨论:
- Size in Bytes: 这个是表示当前分区可以存储的最大字节数吗?
- LastEnqueuedOffset: 这个是表示是最后一条消息在这个分区上的字节偏移量吗?
- Incoming / OutgoingBytesPerSecond: 这两个值是0,是按照多长的时间跨度算的这个值?
- Begin Sequence Number: 这个是在这个消费者组的视角下未被消费的消息的起始消息号吗?
- End Sequence Number: 这个是在这个消费者组的视角下未被消费的消息的结束消息号?
- 如果Event Hub下有两个消费者组,一个Default,一个是自建的,两个消费者组看到的内容是一样的吗?
问题回答
Size in Bytes: 这个是表示当前分区可以存储的最大字节数吗?
【答】:Size in Bytes是指事件分区的大小
LastEnqueuedOffset: 这个是表示是最后一条消息在这个分区上的字节偏移量吗?
【答】:LastEnqueuedOffset 是指最后一个进入队列的事件的偏移量
Incoming / OutgoingBytesPerSecond: 这两个值是0,是按照多长的时间跨度算的这个值?
【答】:Incoming / OutgoingBytesPerSecond是指此使用者组中分区的事件的大致传入/传出速率(非100%精确,仅供参照)
Begin Sequence Number: 这个是在这个消费者组的视角下未被消费的消息的起始消息号吗?
【答】:Begin Sequence Number分区数据中开始获取的第一个事件的序列号(因为Event Hub中的数据会过期清理,所以里面会不会永久保存),所以该值也表示当前分区中现存事件的第一条消息序列号。
End Sequence Number: 这个是在这个消费者组的视角下未被消费的消息的结束消息号?
【答】: End Sequence Number分区数据中开始获取的最后一个事件的序列号就是结束序列号,所以该值也表示当前分区中现存事件中最后一条消息的序列号。
注:End Sequence Number - Begin Sequence Number = Total Message
如果Event Hub下有两个消费者组,一个Default,一个是自建的,两个消费者组看到的内容是一样的吗?
【答】:多个消费组所消费的EventHub数据是一样的。
衍生问题:
1) 在代码中设置了消费者组的 Checkpoint 保存位置,官方文档说EventHub的 Checkpoint 不保存在 Broker (服务端)上,由客户端指定保存位置。那是不是如果用多个客户端使用同一个消费者组消费,但是每个客户端设置的checkpoint存储位置都不一样,那么每个客户端都能成功消费到事件,但是实际还是各自消费,消费的事件是重复的?
【答】:是的,消费者组都是分别处理的,消费的事件是重复的。
2)消费端消费的时候,有一个start-position,可以取值EARLIEST和LATEST,如果消费端已经有了 Checkpoint ,这个start-position具体时什么时候起作用?
start-position:Whether the consumer receives messages from the beginning or end of event hub. if EARLIEST
, from beginning. If LATEST
, from end. Default: LATEST
【答】:Checkpoint 存储在 Storage Account中。它的目的是:如果读取者与分区断开连接,当它重新连接时,将开始读取前面由该使用者组中该分区的最后一个读取者提交的检查点(Checkpoint), 它会将此偏移量传递给事件中心,以指定要从其开始读取数据的位置。
start-position 连接分区进行消费时候,开始使用使用这个参数,如果设置为EARLIEST,就从start-position这个位置往前读,设置为LATEST就从start-position这个位置往后读。
Checkpoint 和 start-position 有个互斥关系,如果配了其中的某一个,另一个会被忽略。即
- 如果没有分区的checkpoint值,则从该事件位置开始接收也就是从start-position开始。
- 如果有,将使用checkpoint值开始再次消费事件。
参考资料:
Event Hub Consumer Properties:https://docs.microsoft.com/en-us/java/api/overview/azure/spring-cloud-stream-binder-eventhubs-readme?view=azure-java-stable#event-hub-consumer-properties