04. Kafka Notes
04. Kafka Notes
Apache Kafka
==============
=> Apache Kafka is used to process real time data feeds with high throughput and
low latency
Ex : flights data, sensors data, stocks data, news data, social media etc....
===================
Kafka Terminology
===================
Zookeeper
Kafka Server
Kafka Topic
Message
Publisher
Subscriber
===========
Kafka APIs
===========
Connector API
Publisher API
Subscriber API
Streams API
========================================
Spring Boot + Apache Kafka Application
=======================================
URL : http://mirrors.estointernet.in/apache/zookeeper/stable/
URL : http://mirrors.estointernet.in/apache/kafka/
Step-4 : Start Zookeeper server using below command from kafka/bin/windows folder
Step-5: Start Kafka Server using below command from Kakfa folder
##############################
Kafka Producer App Development
##############################
=============================
1) Add below dependencies
================================
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
========================================
2) Create Kafka Constants class
============================================
public class AppConstants {
public static final String TOPIC = "ashokit_order_topic";
public static final String HOST = "localhost:9092";
=======================================
3) Create Model class to represent data
=======================================
@Data
public class Order {
=======================================
4) Create Kafka Producer Config class
=======================================
@Configuration
public class KafkaProduceConfig {
@Bean
public ProducerFactory<String, Order> producerFactory() {
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
AppConstants.HOST);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
JsonSerializer.class);
@Bean
public KafkaTemplate<String, Order> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
==============================
4) Create Service Class
============================
@Service
public class OrderService {
@Autowired
private KafkaTemplate<String, Order> kafkaTemplate;
=================================
5) Create RestController classs
==============================
@RestController
public class OrderRestController {
@Autowired
private OrderService service;
@PostMapping("/order")
public String createOrder(@RequestBody Order order) {
String msg = service.addMsg(order);
return msg;
}
====================================
6) Run the application and test it
====================================
{
"id" : "OD101",
"price" : 200.00,
"email" : "[email protected]"
}
#################################
Kafka Subscriber App Dvelopment
#################################
==========================
1) Add below dependencies
==========================
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
==========================
2) Create Constants class
=========================
===============================
3) Create Model class
===============================
@Data
public class Order {
===================================
4) Create Consumer Config
===================================
@Configuration
public class KafkaConsumerConfig {
@Bean
public ConsumerFactory<String, Order> consumerFactory() {
configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
AppConstants.HOST);
configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
JsonDeserializer.class);
@Bean
public ConcurrentKafkaListenerContainerFactory<String, Order>
kafkaListnerFactory() {
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
==================================================
5) Add below method in boot app start class
====================================================
=======================================
6) Run the application
=======================================
####### 7) Send Request to Producer app and observer Subscriber app console
############