怎么把从数据库获取得信息写入到KAFKA中呢?
下面简单写个demo
首先你得先启动zookeeper和kafka
参考别人的博客:Kafka安装(windows)
启动之后,写一个demo项目,创建一个spring boot项目,pom依赖如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chd</groupId>
<artifactId>kafka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kafka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.0.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok ********************* Begin -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- lombok ********************* End -->
<!-- kafka ********************* Begin -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!-- kafka ********************* End -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建一个实体类People
package com.example.dao;
public class People {
public String name ;
public Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
再分别创建生产者和消费者
生产者(写信息到KAFKA)
package com.example.producer;
import com.example.dao.People;
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Validated//对传输的参数进行数据校验的注解
@RestController
@RequestMapping("/kafka")
public class ProductController {
@Autowired
private KafkaTemplate kafkaTemplate;
/**
* 生产者发送消息
* @return
*/
@GetMapping("/send")
public String send(@RequestParam(value = "topic") String topic, @RequestParam(value = "msg") String msg){
//这里是创建一个实体类来代替数据库得信息
People people = new People();
people.setName("chd");
people.setAge(18);
//需要把对象转换成json数据然后在传入到kafak中
Gson gson = new GsonBuilder().create();
String msg1=gson.toJson(people);
kafkaTemplate.send(topic, msg1);
log.info("发送消息的topic为: {}! 发送的内容为: {}", topic, msg1);
return "发送消息成功!";
}
}
消费者(从KAFKA中读信息)
package com.example.producer;
import com.example.dao.People;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
/**
* 消费者消费消息
*/
@Slf4j
@Component
public class CustomerController {
/**
* topics = "demo" 要消费的topic名称
* @param record
*/
@KafkaListener(topics = "demo")
public void listen (ConsumerRecord<?, ?> record){
log.info("topic是: {}, offset是: {}, value是: {}", record.topic(), record.offset(), record.value());
Gson gson = new Gson();
People pe=gson.fromJson(String.valueOf(record.value()), People.class);
System.out.println("实体类为"+pe.toString());
}
}
结果如下