The producer client library batches messages into publish requests that it sends to the MapR Streams server. By default, the client sends multiple publish requests without waiting for acknowledgements from the MapR Streams server. This behavior is determined by the per producer configuration parameter streams.parallel.flushers.per.partition, which defaults to true.

To publish a message, a producer sends a record to the producer client library, which batches the records before sending
them to the server. The producer client library will send the records to the server when any of the four following conditions
are met.

The producer client library batches messages into publish requests that it sends to the MapR Streams server. By default, the client sends multiple publish requests without waiting for acknowledgements from the MapR Streams server. This behavior is determined by the per producer configuration parameter streams.parallel.flushers.per.partition, which defaults to true.

Because the number of partitions in a topic can change over time, producers regularly refresh the information that they
have about the topics that they know of. This interval is controlled by the metadata.max.age.ms configuration parameter.

As of MapR 5.2.1, you can develop C applications for MapR Streams. The MapR Streams C Client is a distribution of librdkafka
that can work with MapR Streams. The Streams C Client is available in a MapR Expansion Pack (MEP) starting with MEP 3.0.

As of MapR 5.2.1, you can create python applications for MapR Streams using the Streams Python client. The Streams Python
client is a binding for librdkafka. The Streams Python client is available in a MapR Expansion Pack (MEP) starting with
MEP 3.0.

Use Apache Kafka's MirrorMaker utility either to mirror topics that are in Apache Kafka clusters to streams that are in
MapR clusters or to Mirror topics that are in MapR clusters to Apache Kafka clusters.

This topic provides links to the locations of MapR's public APIs. These APIs are available for application development
purposes.

The Two Modes of Publishing

The producer client library batches messages into publish requests that it sends to the
MapR Streams server. By default, the client
sends multiple publish requests without waiting for acknowledgements from the MapR Streams server. This behavior is determined by
the per producer configuration parameter
streams.parallel.flushers.per.partition, which defaults to true.

With this behavior turned on, it is possible for messages to arrive to partitions out of
order due to the presence of multiple network interface controllers, network errors, or
retries.

For example, suppose a producer is sending messages that are specifically for partition 1.
The producer client library buffers the messages and sends a batch to partition 1. Meanwhile,
the producer keeps sending messages for partition 1 and the client continues to buffer them.
The next time the producer client library has enough messages for partition 1, the client
sends another batch, whether or not the MapR Streams server has acknowledged the previous
batch.

If you always want messages to arrive to partitions in the order in which they were sent,
set the configuration parameter streams.parallel.flushers.per.partition to
false. The producer client library will wait for acknowledgements from the MapR Streams server before sending subsequent
publish requests.