Search code examples
spring-bootapache-kafkaspring-integrationspring-kafka

What is the difference between event, channels, topics?


With refernce to Kafka, what is the difference between all these?

Lets say I have a component "Order" which must emit events into a kafka-channel when I create/cancel/modify orders.

And I create a channel. As "Order-out". Is topic the name I can use for this channel? What is topic vs channel?

And this is the Order-Details component. Which creates & maintains records of all such orders. I want to use an orderEvents class inside subscriber section of this component.

public class OrderEvents {
  public static final String ORDER_CREATED = "ORDER_CREATED";
  public static final String ORDER_MODIFIED = "ORDER_MODIFIED";
  public static final String ORDER_CANCELLED = "ORDER_CANCELLED";
}

Solution

  • An event is a single record. In Spring, you might work with a Message class to wrap an event.

    Channel is a Spring Integration term used via Spring-Kafka or Spring Cloud Stream Binders for inputs and outputs. A Binder determines the implementation of the Channel.

    Topic is a Kafka unit of organization.


    An event will be serialized into bytes, and sent via a channel to a Kafka topic.

    A Kafka record will be consumed from a Kafka topic, through a channel, and deserialized into an application event class.