nifi-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Zhurakousky <>
Subject Re: How to integrate a custom protocol with Apache Nifi
Date Wed, 07 Dec 2016 12:55:24 GMT

There are couple of questions here so, let me try one at the time.
1. “why Nifi would act as a server?”. Well, NiFi is a runtime environment where things
are happening. To be more exact; NiFi is a runtime environment where things are triggered.
The big distinction here is trigger vs happening. In other words you may choose (as most processors
do) to have NiFi act as an execution container and run your code, or you may chose for the
NiFi to be a triggering container that triggers to run your code elsewhere. Example of the
later one is the SpringContextProcessor which while still runs in the same JVM delegates execution
to Spring application that runs in its own container (which could as well be a separate JVM
or nah other container - ala micro services). So in this case NiFi still manages the orchestration,
mediation, security etc.

2. “ I need to worry about how my service would talk to Nifi or do I have the freedom
of just focusing on my application and using whatever protocol I want and In the end just
plugin to Nifi which would take care?” That is a loaded question and I must admit not fully
understood, but i’ll give it a try. When integrating with NiFi you use one of the integration
points such as Processor and/or ControllerService. Those are NiFi known strategies (interfaces)
and so your custom Processor would need to implement such strategy and obviously be compliant
with its contract. However, the other part of your question is about implementing something
“independent” and just plug-in and if t’s possible. My answer is still YES as long as
you design it that way. As an example of such design you may want to look at AMQP support
where there are a pair of processors (PublishAMQP/ConsumeAMQP), but when you look at the code
of these processors you’ll see that neither has any AMQP dependencies. Instead they depend
on another case (let’s call it Worker) and that class is completely independent of NiFi.
So in summary your protocol-specific Processor is independent of the protocol and your protocol-specific
Worker is independent of NiFi and the two delegate between one another through common to both
object (in this case bye[]). The Spring processor mentioned above implements the same pattern.

And one more point about Microservices. I am willing to go as far as saying that NiFi is a
variation of Microservices container. I am basing it n the fact that NiFi components (i.e.,
processors) implement a fundamental micro services pattern  - certain independence from it’s
runtime and persistence of its results - which allows each and every component to be managed
(start/stopped/reconfigured/changed) independently of upstream/downstream components.

Ok, that is a load to process, so I’ll stop ;)

Look forward to more questions


On Dec 7, 2016, at 4:52 AM, kant kodali <<>>

I am also confused a little bit since I am new to Nifi. I wonder why Nifi would act as a server?
isn't Nifi a routing layer between systems? because this brings in another question about
Nifi in general.

When I write my applications/microservices do I need to worry about how my service would talk
to Nifi or do I have the freedom of just focusing on my application and using whatever protocol
I want and In the end just plugin to Nifi which would take care? other words is Nifi a tight
integration with applications such that I always have to import a Nifi Library within my application/microservice
? other words do I need to worry about Nifi at programming/development time of an Application/Microservice
or at deployment time?

Sorry if these are naive questions. But answers to those will help greatly and prevent me
from asking more questions!

Thanks much!

On Wed, Dec 7, 2016 at 1:23 AM, kant kodali <<>>
Hi Koji,

That is an awesome explanation! I expected processors for HTTP2 at very least since it is
widely used ( the entire GRPC stack runs on that). I am not sure how easy or hard it is to
build one?


On Wed, Dec 7, 2016 at 1:08 AM, Koji Kawamura <<>>
Hi Kant,

Although I'm not aware of existing processor for HTTP2 or NSQ, NiFi
has a set of processors for WebSocket since 1.1.0.
It enables NiFi to act as a WebSocket client to communicate with a
remote WebSocket server, or makes NiFi a WebSocket server so that
remote clients access to it via WebSocket protocol.

I've written a blog post about how to use it, I hope it will be useful
for your use case:


On Wed, Dec 7, 2016 at 3:23 PM, kant kodali <<>>
> Thanks a ton guys! Didn't expect Nifi community to be so good! (Another
> convincing reason!)
> Coming back to the problem, We use NSQ a lot (although not my favorite) and
> want to be able integrate Nifi with NSQ to other systems such as Kafka,
> Spark, Cassandra, ElasticSearch, some micro services that uses HTTP2 and
> some micro service that uses Websockets
> (which brings in other question if Nifi has HTTP2 and Websocket processors?)
> Also below is NSQ protocol spec. They have Java client library as well.
> On Tue, Dec 6, 2016 at 5:14 PM, Oleg Zhurakousky
> <<>> wrote:
>> Hi Kant
>> What you’re trying to accomplish is definitely possible, however more
>> information may be needed from you.
>> For example, the way I understand your statement about “integration with
>> many systems” is something like JMS, Kafka, TCP, FTP etc…. If that is the
>> case such integration is definitely possible with your “custom system” by
>> developing custom Processor and/or ControllerService.
>> Processors and ControllerServices are the two main integration points
>> within NiFi
>> You can definitely find may examples by looking at some of the processors
>> (i.e., PublishKafka or ConsumeKafka, PublishJMS or ConsumeJMS etc.)
>> Let us know if you need more help to guide you through the process.
>> Cheers
>> Oleg
>> > On Dec 6, 2016, at 7:46 PM, kant kodali <<>>
>> >
>> > HI All,
>> >
>> > I understand that Apache Nifi has integration with many systems but what
>> > If I have an application that talks a custom protocol ? How do I integrate
>> > Apache Nifi with the custom protocol?
>> >
>> > Thanks,
>> > kant

View raw message