poorbarcode commented on code in PR #20469: URL: https://github.com/apache/pulsar/pull/20469#discussion_r1223318294
########## pip/pip-269.md: ########## @@ -0,0 +1,247 @@ +# Background knowledge + +The Cursor is used to read data from ledgers, there are three scenarios for reading messages(we can call these scenarios Read-Scenario): +- **Sequentially Read**: Read entries from `read position`(include), after the read is complete, set `read position` to the next position of the last entry of this read, then the next round of **Sequentially Read**. Note: In addition to delivering messages to consumers, some internal apis are also using **Sequentially Read**, such as `Compaction`, `TopicTransactionBufferRecover`, `Replicator` and so on. +- **Message Replay Read**: Normally consumers will acknowledge messages all they received, but sometimes the consumer can not handle messages and asks the broker to redeliver these messages(these messages are always earlier than `read position`). E.g. call `consumer.negativeAcknowledge`; close a consumer and there are some messages held by this consumer, these messages will be redelivered to other consumers. Message Dispatcher will cache the position of messages which should be redelivered, and Cursor will read messages which were cached in the memory of Message Dispatcher in the next round. In general, **Message Replay Read** does not modify the `read position`, except in the scenario **A compensation mechanism of Message Replay Read** below. +- **Specified Read**(Read directly using Managed Ledger): there are some APIs that can read messages at a specified position, but generally do not affect the attributes of the Cursor or Message Dispatcher. E.g. + - [`pulsar-admin topics examine-messages`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#examine-messages) + - [`pulsar-admin topics get-message-by-id`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#get-message-by-id) + +Summarize: The `read position` of the Cursor is a marker, reads above or equal to this marker are called **Sequentially Read**, and reads below this marker are called **Message Replay Read**(these messages have been read once by **Sequentially Read** before), and **Specified Read** does not care about this marker(in fact, **Specified Read** does not even care about Cursor). Review Comment: > Summarize --> summary fixed. > I highly recommend working with grammar tools like Grammarly, LanguageTool, or others - many are free. I am using this tool, but it is not working on this page below  -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
