LowLevel: This is the preferred mode of consumption. Pinot creates independent partition-level consumers for each partition. Depending on the the configured number of replicas, multiple consumers may be created for each partition, taking care that no two replicas exist on the same server host. Therefore you need to provision at least as many hosts as the number of replcias configured.
HighLevel: Pinot creates one stream-level consumer that consumes from all partitions. Each message consumed could be from any of the partitions of the stream. Depending on the configured number of replicas, multiple stream-level consumers are created, taking care that no two replicas exist on the same server host. Therefore you need to provision exactly as many hosts as the number of replicas configured.
- 1.A certain number of rows are consumed
- 2.The consumption has gone on for a certain length of time
- Pause consumption
- Persist the rows consumed so far into non-volatile storage
- Continue consuming new rows into volatile memory again.
LowLevelmode, the completed segments are persisted the into local non-volatile store of pinot server as well as the segment store of the pinot cluster (See Pinot Architecture Overview). This allows for easy and automated mechanisms for replacing pinot servers, or expanding capacity, etc. Pinot has special mechanisms that ensure that the completed segment is equivalent across all replicas.
committer server. The
committer serverbuilds the segment and uploads it to the controller. All the other
non-committer serversfollow one of these two paths:
non-committerserver also builds the segment locally and replaces the in-memory segment
non-committerserver downloads the segment from the controller.
HighLevelmode, the servers persist the consumed rows into local store (and not the segment store). Since consumption of rows can be from any partition, it is not possible to guarantee equivalence of segments across replicas.