Slackbot
11/11/2023, 8:19 PMMuni Chada
11/12/2023, 3:17 AMproxyRoles option on the broker config side.
A suggested solution is to set proxyRolesEnabled to true, then try update cluster. cc @Yu Wei Sung
superUsers:
proxyRolesEnabled: trueRuturaj
11/12/2023, 3:30 AMMuni Chada
11/12/2023, 3:47 AMYu Wei Sung
11/12/2023, 6:06 PMSandesh Shingare
11/12/2023, 8:13 PMDavid K
11/13/2023, 7:07 PMYu Wei Sung
11/13/2023, 7:33 PMKen
12/07/2023, 2:38 PMSandesh Shingare
12/07/2023, 2:48 PMDavid K
12/07/2023, 3:27 PMSandesh Shingare
01/02/2024, 10:57 AMLari Hotari
01/02/2024, 11:14 AMAlso if you can help, we have a doubt around this reactive pulsar client. There's no close method available for ReactiveMessageConsumer and ReactiveMessageSender classes, so we are not able to close these at runtime. Close method is available for Producer and Consumer objects in plain Java client. Is there a way to achieve this in reactive client?@Sandesh Shingare The lifecycle is handled in a different way in the reactive client. It uses the reactive streams subscription. When the subscription is closed, the resources are released.
Lari Hotari
01/02/2024, 11:19 AM.close .Sandesh Shingare
01/02/2024, 11:19 AMLari Hotari
01/02/2024, 11:21 AMwe are using the https://github.com/apache/pulsar-client-reactive client to produce messages.it is necessary to configure the
ReactiveMessageSenderCache . Please check the above IngestController example.Lari Hotari
01/02/2024, 11:24 AMduring testing on higher load we notice that a load balance is triggered on the brokers nodes as expected but we end up getting errors on the client about connections being already closed and we start to see failures on our application which is running the producer causing a cascading effect.this type of events are expected, but the errors should be transient to the application layer. The Pulsar client retries by default if connections are disconnected.
Sandesh Shingare
01/04/2024, 7:38 PMLari Hotari
01/04/2024, 9:44 PMSandesh Shingare
01/05/2024, 4:32 AMSandesh Shingare
01/05/2024, 7:32 AMLari Hotari
01/05/2024, 8:40 AMpublic interface ReactiveMessageSender<T> {
/**
* Send one message.
* @param messageSpec the spec of the message to send
* @return a publisher that will emit one message id and complete
*/
Mono<MessageId> sendOne(MessageSpec<T> messageSpec);
/**
* Send multiple messages and get the sending results in the same order as the
* messages sent. The results are {@link MessageSendResult} objects composed of the
* message ID of the message sent and of the original message spec that was sent. A
* {@code correlationMetadata} can be attached to a {@link MessageSpec} and retrieved
* with {@link MessageSendResult#getCorrelationMetadata()} to correlate the messages
* sent with the results.
* @param messageSpecs the specs of the messages to send
* @return a publisher that will emit a {@link MessageSendResult} per message
* successfully sent in the order that they have been sent
*/
Flux<MessageSendResult<T>> sendMany(Publisher<MessageSpec<T>> messageSpecs);
}
For sendOne, the Mono should complete successfully. For sendMany, by default the Flux will ignore send errors and provide individual send errors in the MessageSendResult. If ordering is important, this should be configured in a different way by setting .stopOnError(true) on the ReactiveMessageSenderBuilder. In that case, the Flux will terminate on the first error.
/**
* Sets whether an error when sending an individual message of the
* {@link ReactiveMessageSender#sendMany(Publisher)} operation should stop the full
* stream or not. (default: false). If true, the original error is wrapped in a
* {@link ReactiveMessageSendingException} and propagated downstream. If false, a
* {@link MessageSendResult} is returned with the exception put in the
* {@code Exception} field and a {@code null} {@link MessageId} field.
* @param stopOnError true if the send stream should stop on error, false otherwise.
* @return the sender builder instance
*/
ReactiveMessageSenderBuilder<T> stopOnError(boolean stopOnError);
I hope this helps making progress.
With at-least-once / idempotent messaging application design it is necessary that the application is fine with duplicate messages. Perhaps someone could recommend resources where this is explained in a good way? /cc @David KSandesh Shingare
01/08/2024, 10:05 AMLari Hotari
01/08/2024, 10:35 AMLari Hotari
01/08/2024, 10:46 AMFlux.range(1, 1000).flatMap(i -> ... ) is the reactive alternative.Sandesh Shingare
01/08/2024, 12:18 PM