JSON File To Kafka Topic

Apache Kafka, a streaming platform that is open-source, fault-tolerant, and exceptionally scalable, operates on a publish-subscribe architecture for real-time data streaming. By enlisting a queue to handle the data, we can achieve efficient processing of vast amounts of data with minimal latency. In certain scenarios, sending JSON data types to the Kafka topic is necessary for comprehensive data processing and analysis. Let us delve into a practical example of sending JSON file data to a Kafka topic and then consume them.

1. Importance of JSON Data in Kafka

Apache Kafka, a powerful and scalable streaming platform, relies on efficient data handling to enable real-time data processing. One crucial aspect of this process is the use of JSON (JavaScript Object Notation) data, which plays a significant role in enhancing the capabilities of Kafka. Let’s explore the importance of JSON data in the Kafka ecosystem.

  • Data Structure Flexibility: JSON provides a flexible and lightweight data interchange format. Its simple and human-readable structure allows for easy representation of complex data hierarchies. In Kafka, this flexibility is invaluable as it accommodates various data types and structures, making it suitable for diverse use cases.
  • Compatibility with Different Languages: Being a language-agnostic format, JSON facilitates seamless communication between different programming languages. Kafka, often used in multi-language environments, benefits from the interoperability provided by JSON. Producers and consumers written in different languages can easily exchange data without compatibility issues.
  • Ease of Integration with Web Technologies: JSON is a natural fit for web applications and APIs, making it well-suited for scenarios where Kafka interacts with web technologies. Its compatibility with JavaScript simplifies integration with front-end applications, enabling smooth communication between backend Kafka systems and user interfaces.
  • Schema Evolution and Versioning: JSON supports schema evolution, allowing for changes in data structures over time without disrupting existing systems. This is particularly advantageous in Kafka environments where evolving data schemas are common. JSON’s flexibility in handling schema changes ensures a robust and adaptable data processing pipeline.
  • Human-Readable Logging and Debugging: During development, debugging, and monitoring, having human-readable data formats is essential. JSON’s clarity and simplicity make it easy for developers and operators to inspect messages flowing through Kafka topics. This transparency aids in troubleshooting and ensures a more straightforward debugging process.
  • Support for Nested Structures: JSON’s support for nested structures is beneficial when dealing with complex data relationships. In Kafka, where messages contain intricate data hierarchies, the ability to represent nested structures using JSON enhances the expressiveness and richness of the data being processed.

2. Kafka Setup on Docker

Let us understand how to get Kafka running on Docker.

2.1 Prerequisites

Before you begin, ensure that you have Docker installed on your machine. You can download and install Docker from the official website: https://www.docker.com/get-started.

2.2 Download Kafka Docker Image

Use the following command to download the official Kafka Docker image:

docker pull wurstmeister/kafka

2.3 Start Zookeeper

Kafka depends on Zookeeper, so you need to start a Zookeeper container first. Run the following command:

docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

2.4 Start Kafka Container

Now, you can start the Kafka container. Make sure to link it to the Zookeeper container:

docker run -d --name kafka -p 9092:9092 --link zookeeper:zookeeper -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT -e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT wurstmeister/kafka

2.5 Create a Topic

You can create a Kafka topic using the following command. Replace “my-topic” with your desired topic name:

docker exec -it kafka /opt/kafka_2.12-2.4.0/bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

2.6 Produce Data

To ensure that Kafka is running and the topic is created, you can run a simple producer and consumer. Open a terminal window and run the following command:

docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh \
    --broker-list localhost:9092 --topic my-topic <

You can even use the JSON file to produce the data.

docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh \
    --broker-list localhost:9092 --topic your-topic < /path/to/your/json/file

2.7 Consume Data

Open a terminal window and run the following command to send and receive messages on the specified topic:

docker exec -it kafka /opt/kafka/bin/kafka-console-consumer.sh \
    --bootstrap-server localhost:9092 --topic my-topic --from-beginning

2.7.1 Command Explanation

  • docker exec -it kafka: Executes a command within the running Docker container named “kafka.”
  • /opt/kafka/bin/kafka-console-consumer.sh: Launches the Kafka console consumer script, allowing the consumption of messages from Kafka topics.
  • --bootstrap-server localhost:9092: Specifies the address of the Kafka broker to connect to. In this case, it is set to “localhost” on port 9092.
  • --topic my-topic: Indicates the Kafka topic from which messages should be consumed. Replace “my-topic” with the actual name of your target Kafka topic.
  • --from-beginning: This optional flag instructs the consumer to start consuming messages from the beginning of the topic. If omitted, the consumer will only consume new messages published after the consumer subscribes to the topic.

3. Conclusion

In conclusion, JSON data plays a crucial role in Kafka, offering a flexible and readable format for complex data hierarchies. Kafka’s setup is foundational, establishing a distributed and fault-tolerant architecture for scalable data streaming. Producing data involves efficiently generating messages, and Kafka consumers facilitate the extraction of insights from real-time streams, making the entire process essential for building robust and adaptable data processing applications in modern environments.


An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Back to top button