Apache Kafka is a distributed streaming and messaging system. There are a number of other excellent messaging systems such as RabbitMQ and MQTT. Where Kafka is being recognized is in the areas of high volume performance, clustering and reliability.
Like RabbitMQ and MQTT, Kafka messaging are defined as topics. Topics can be produced (published) and consumed (subscribed). Where Kafka differs is in the storage of messages. Kafka stores all produced topic messages up until a defined time out.
Node-Red is an open source visual programming tool that connects to Raspberry Pi hardware and it has web dashboards that can be used for Internet of Things presentations.
In this blog I would like to look at using Node-Red with Kafka for Internet of Things type of applications.
Getting Started
Kafka can be loaded on a variety of Unix platforms and Windows. A Java installation is required for Kafka to run, and it can be installed on an Ubuntu system by:
apt-get install default-jdk
For Kafka downloads and installation instructions see: https://kafka.apache.org/quickstart. Once the software is installed and running there a number of command line utilities in the Kafka bin directory that allow you to do some testing.
To test writing messages to a topic called iot_test1, use the kafka-console-producer.sh command and enter some data (use Control-C to exit):
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic iot_test1 11 22 33
To read back and listen for messages:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic iot_test1 --from-beginning 11 22 33
The Kafka server is configured in the /config/server.properties file. A couple of the things that I tweeked in this file were:
# advertised the Kafka server node ip advertised.listeners=PLAINTEXT://192.168.0.116:9092 # allow topics to be deleted delete.topic.enable=true
Node-Red
Node-Red is a web browser based visual programming tool, that allows users to create logic by “wiring” node blocks together. Node-Red has a rich set of add-on components that includes things such as: Raspberry Pi hardware, Web Dash boards, email, Tweeter, SMS etc.
Node-Red has been pre-installed on Raspbian since 2015. For full installation instructions see: https://nodered.org/#get-started
To add a Node-Red component select the “Palette Manager”, and in the Install tab search for kafka. I found that the node-red-contrib-kafka-manager component to be reliable (but there are others to try).
For my test example I wanted to create a dashboard input that could be adjusted. Then read back the data from the Kafka server and show the result in a gauge.
This logic uses:
- Kafka Consumer Group – to read a topic(s) from a Kafka server
- Dashboard Gauge – to show the value
- Dashboard Slider – allows a user to select a numeric number
- Kafka Producer – sends a topic message to the Kafka server
Double-click on the Kafka nodes and in the ‘edit configuration’ dialog create and define a Kafka broker (or server). Also add the topic that you wish to read/write to.
Double-click on the gauge and slider nodes and define a Dashboard group. Also adjust the labels, range and sizing to meet your requirements.
After the logic is complete hit the Deploy button to run the logic. The web dashboard is available at: http://your_node_red_ip:1880/ui.
Final Comment
I found Node-Red and Kafka to be easy to use in a simple standalone environment. However when I tried to connect to a Cloud based Kafka service (https://www.cloudkarafka.com/) I quickly realized that there is a security component that needs to be defined in Node-Red. Depending on the cloud service that is used some serious testing will probably be required.