[
https://issues.apache.org/jira/browse/NIFI-1097?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14987181#comment-14987181
]
Andre commented on NIFI-1097:
-----------------------------
Joe,
As much as I would like NIFI-1095 to be implemented as soon as possible (I am
trying to get my head around Java so I can contribute that code) I am not sure
the behaviour present should be a *critical* concern (as long it is correctly
documented).
The reason I mentioned that is because the implementation of Kafka's async
calls seem to cursed with message delivery to the void, for example:
Shopify's Sarama (GoLang) deal with failure by spitting the message back to an
error channel (similar to what I imagine the new JAVA API is doing), but even
if you can get the details of a failed message delivery, I wonder how
challenging would be for NiFi to rely on Kafka's Async Producer for reliable
delivery when it documentation is quite clear in that space for blocking and
errors still exist around its buffering mechanism:
{quote}
This buffer has a hard limit on it's size, which is controlled by the
configuration total.memory.bytes. If send() is called faster than the I/O
thread can transfer data to the brokers the buffer will eventually run out of
space. The default behavior in this case is to block the send call until the
I/O thread catches up and more buffer space is available. However in cases
where non-blocking usage is desired the setting block.on.buffer.full=false will
cause the producer to instead throw an exception when buffer memory is
exhausted.
{quote}
I would rather draw a line and document that when considering reliable delivery
vs. speed on should chose:
If reliability is important, use Synchronous and let NIFI control buffering,
backpressure, etc. Performance will be impacted and that should be dealt by
either merging messages prior to send or via higher parallelism.
If speed is important, go nuts and use the Asynchronous producer, message
losses may occur.
Having said that, I'm all pro for moving to the new API. :-)
> PutKafka should be changed to use the new 0.8.2 Producer API
> ------------------------------------------------------------
>
> Key: NIFI-1097
> URL: https://issues.apache.org/jira/browse/NIFI-1097
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Reporter: Mark Payne
> Assignee: Mark Payne
> Priority: Critical
> Fix For: 0.4.0
>
>
> Currently, PutKafka uses the old Producer API, which provides several
> limitations. The most critical of these limitations is that the asynchronous
> send does not provide an indication of its success. As a result, when
> PutKafka is configured to send asynchronously, it will always route the
> FlowFIle to 'success' even if it does not send the data to Kafka.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)