├── docs
├── kafka-how-to-not-loss-message.md
├── 4-SpringBoot+Kafka之如何优雅的创建topic.md
├── 5.md
├── 1-大白话带你认识Kafka.md
├── 2-5分钟带你体验一把Kafka.md
└── 3-10分钟学会如何在SpringBoot程序中使用Kafka作为消息队列.md
├── kafka-intro-maven-demo
├── .idea
│ ├── .gitignore
│ ├── vcs.xml
│ ├── misc.xml
│ ├── compiler.xml
│ ├── checkstyle-idea.xml
│ └── inspectionProfiles
│ │ └── Project_Default.xml
├── target
│ └── classes
│ │ ├── Main.class
│ │ ├── ConsumerCreator.class
│ │ ├── KafkaConstants.class
│ │ └── ProducerCreator.class
├── src
│ └── main
│ │ └── java
│ │ ├── KafkaConstants.java
│ │ ├── ConsumerCreator.java
│ │ ├── ProducerCreator.java
│ │ └── Main.java
└── pom.xml
├── springboot-kafka-03-transaction
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
├── src
│ ├── test
│ │ └── java
│ │ │ └── cn
│ │ │ └── javaguide
│ │ │ └── demo
│ │ │ └── DemoApplicationTests.java
│ └── main
│ │ ├── java
│ │ └── cn
│ │ │ └── javaguide
│ │ │ ├── entity
│ │ │ └── Book.java
│ │ │ ├── DemoApplication.java
│ │ │ ├── service
│ │ │ ├── BookProducerService.java
│ │ │ └── BookConsumerService.java
│ │ │ ├── controller
│ │ │ └── BookController.java
│ │ │ └── config
│ │ │ └── KafkaConfig.java
│ │ └── resources
│ │ └── application.yml
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── springboot-kafka-01-send-objects
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
├── src
│ ├── test
│ │ └── java
│ │ │ └── cn
│ │ │ └── javaguide
│ │ │ └── springbootkafka01sendobjects
│ │ │ └── SpringbootKafka01SendObjectsApplicationTests.java
│ └── main
│ │ ├── resources
│ │ └── application.yml
│ │ └── java
│ │ └── cn
│ │ └── javaguide
│ │ └── springbootkafka01sendobjects
│ │ ├── SpringbootKafka01SendObjectsApplication.java
│ │ ├── entity
│ │ └── Book.java
│ │ ├── service
│ │ ├── BookProducerService.java
│ │ └── BookConsumerService.java
│ │ ├── config
│ │ └── KafkaConfig.java
│ │ └── controller
│ │ └── BookController.java
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── springboot-kafka-02-config-topics
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
├── src
│ ├── main
│ │ ├── resources
│ │ │ └── application.yml
│ │ └── java
│ │ │ └── cn
│ │ │ └── github
│ │ │ ├── SpringbootKafka02ConfigTopicsApplication.java
│ │ │ └── config
│ │ │ ├── TopicConfigurations.java
│ │ │ └── TopicAdministrator.java
│ └── test
│ │ └── java
│ │ └── cn
│ │ └── github
│ │ └── springbootkafka02configtopics
│ │ └── SpringbootKafka02ConfigTopicsApplicationTests.java
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
└── README.md
/docs/kafka-how-to-not-loss-message.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/target/classes/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/kafka-intro-maven-demo/target/classes/Main.class
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/target/classes/ConsumerCreator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/kafka-intro-maven-demo/target/classes/ConsumerCreator.class
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/target/classes/KafkaConstants.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/kafka-intro-maven-demo/target/classes/KafkaConstants.class
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/target/classes/ProducerCreator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/kafka-intro-maven-demo/target/classes/ProducerCreator.class
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/springboot-kafka-03-transaction/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/springboot-kafka-01-send-objects/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Snailclimb/springboot-kafka/HEAD/springboot-kafka-02-config-topics/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/src/main/java/KafkaConstants.java:
--------------------------------------------------------------------------------
1 | public class KafkaConstants {
2 | public static final String BROKER_LIST = "localhost:9092";
3 | public static final String CLIENT_ID = "client1";
4 | public static String GROUP_ID_CONFIG="consumerGroup1";
5 | private KafkaConstants() {
6 |
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/src/test/java/cn/javaguide/demo/DemoApplicationTests.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.demo;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class DemoApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/src/main/java/cn/javaguide/entity/Book.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.entity;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class Book {
11 | private Long id;
12 | private String name;
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | server:
2 | port: 9090
3 | spring:
4 | kafka:
5 | bootstrap-servers: localhost:9092
6 | kafka:
7 | topics:
8 | - name: topic1
9 | num-partitions: 3
10 | replication-factor: 1
11 | - name: topic2
12 | num-partitions: 1
13 | replication-factor: 1
14 | - name: topic3
15 | num-partitions: 2
16 | replication-factor: 1
17 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/src/main/java/cn/javaguide/DemoApplication.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class DemoApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(DemoApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/src/test/java/cn/javaguide/springbootkafka01sendobjects/SpringbootKafka01SendObjectsApplicationTests.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.springbootkafka01sendobjects;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class SpringbootKafka01SendObjectsApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/src/test/java/cn/github/springbootkafka02configtopics/SpringbootKafka02ConfigTopicsApplicationTests.java:
--------------------------------------------------------------------------------
1 | package cn.github.springbootkafka02configtopics;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class SpringbootKafka02ConfigTopicsApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | server:
2 | port: 9090
3 | spring:
4 | kafka:
5 | bootstrap-servers: localhost:9092
6 | consumer:
7 | # 配置消费者消息offset是否自动重置(消费者重连会能够接收最开始的消息)
8 | auto-offset-reset: earliest
9 | producer:
10 | value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
11 | retries: 3 # 重试次数
12 | kafka:
13 | topic:
14 | my-topic: my-topic
15 | my-topic2: my-topic2
16 |
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/src/main/java/cn/github/SpringbootKafka02ConfigTopicsApplication.java:
--------------------------------------------------------------------------------
1 | package cn.github;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SpringbootKafka02ConfigTopicsApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SpringbootKafka02ConfigTopicsApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/src/main/java/cn/javaguide/springbootkafka01sendobjects/SpringbootKafka01SendObjectsApplication.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.springbootkafka01sendobjects;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SpringbootKafka01SendObjectsApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SpringbootKafka01SendObjectsApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | server:
2 | port: 9090
3 | spring:
4 | kafka:
5 | bootstrap-servers: localhost:9092,localhost:9093,localhost:9094
6 | consumer:
7 | # 配置消费者消息offset是否自动重置(消费者重连会能够接收最开始的消息)
8 | auto-offset-reset: earliest
9 | # 事务隔离级别
10 | isolation-level: read_committed #仅读取已提交的消息
11 | producer:
12 | value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
13 | retries: 3 # 重试次数
14 | # 启用事务
15 | transaction-id-prefix: my-tx. # 事务编号前缀
16 | kafka:
17 | topic:
18 | topic-test-transaction: topic-test-transaction
19 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > Kafka 是我在疫情期间在游戏之余学的。虽然之前用过 ActiveMQ 和 RabbitMQ,但是在 Kafka 这门技术面前我也算是一个初学者。文章中若有说法有点完善或者不准确的地方敬请指出。
2 | >
3 | > 总结出来的原因如下:
4 | >
5 | > 1. 方便他人的学习的同时也可以巩固自己的所学知识以便后续回顾;
6 | > 2. 想起来补充.......
7 |
8 | **理论:**
9 |
10 | 1. [大白话带你认识Kafka](./docs/1-大白话带你认识Kafka.md) (这篇文章将会用大白话的方式带你认识 Kafka)
11 | 2. [面试官问我如何保证Kafka不丢失消息?我哭了!](./docs/kafka-how-to-not-loss-message/md)
12 |
13 | **实战:**
14 |
15 | 1. [5分钟带你体验一把 Kafka](./docs/2-5分钟带你体验一把Kafka.md) (这篇文章让你学会如何使用 Docker 安装Kafka环境、使用命令行测试消息队列的功能以及如何在 Java 程序中简单使用Kafka)
16 | 2. [10分钟学会如何在SpringBoot程序中使用Kafka作为消息队列?](./docs/3-10分钟学会如何在SpringBoot程序中使用Kafka作为消息队列.md) (教你用正确的姿势整合Kafka 到 Spring Boot 中作为消息队列)
17 | 3. [SpringBoot+Kafka之如何优雅的创建 topic](./docs/4-SpringBoot+Kafka之如何优雅的创建topic.md) (教你用正确的姿势整合Kafka 到 Spring Boot 中作为消息队列)
18 | 4. ......
19 |
20 |
--------------------------------------------------------------------------------
/springboot-kafka-01-send-objects/src/main/java/cn/javaguide/springbootkafka01sendobjects/entity/Book.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.springbootkafka01sendobjects.entity;
2 |
3 | public class Book {
4 | private Long id;
5 | private String name;
6 |
7 | public Book() {
8 | }
9 |
10 | public Book(Long id, String name) {
11 | this.id = id;
12 | this.name = name;
13 | }
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getName() {
24 | return name;
25 | }
26 |
27 | public void setName(String name) {
28 | this.name = name;
29 | }
30 |
31 | @Override
32 | public String toString() {
33 | return "Book{" +
34 | "id=" + id +
35 | ", name='" + name + '\'' +
36 | '}';
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/springboot-kafka-02-config-topics/src/main/java/cn/github/config/TopicConfigurations.java:
--------------------------------------------------------------------------------
1 | package cn.github.config;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 | import lombok.ToString;
6 | import org.apache.kafka.clients.admin.NewTopic;
7 | import org.springframework.boot.context.properties.ConfigurationProperties;
8 | import org.springframework.context.annotation.Configuration;
9 |
10 | import java.util.List;
11 |
12 | @Configuration
13 | @ConfigurationProperties(prefix = "kafka")
14 | @Setter
15 | @Getter
16 | @ToString
17 | class TopicConfigurations {
18 | private List topics;
19 |
20 | @Setter
21 | @Getter
22 | @ToString
23 | static class Topic {
24 | String name;
25 | Integer numPartitions = 3;
26 | Short replicationFactor = 1;
27 |
28 | NewTopic toNewTopic() {
29 | return new NewTopic(this.name, this.numPartitions, this.replicationFactor);
30 | }
31 |
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/src/main/java/ConsumerCreator.java:
--------------------------------------------------------------------------------
1 | import org.apache.kafka.clients.consumer.Consumer;
2 | import org.apache.kafka.clients.consumer.ConsumerConfig;
3 | import org.apache.kafka.clients.consumer.KafkaConsumer;
4 | import org.apache.kafka.common.serialization.StringDeserializer;
5 |
6 | import java.util.Properties;
7 |
8 | public class ConsumerCreator {
9 |
10 | public static Consumer createConsumer() {
11 | Properties properties = new Properties();
12 | properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConstants.BROKER_LIST);
13 | properties.put(ConsumerConfig.GROUP_ID_CONFIG, KafkaConstants.GROUP_ID_CONFIG);
14 | properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
15 | properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
16 | return new KafkaConsumer<>(properties);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/kafka-intro-maven-demo/src/main/java/ProducerCreator.java:
--------------------------------------------------------------------------------
1 | import org.apache.kafka.clients.producer.KafkaProducer;
2 | import org.apache.kafka.clients.producer.Producer;
3 | import org.apache.kafka.clients.producer.ProducerConfig;
4 | import org.apache.kafka.common.serialization.StringSerializer;
5 |
6 | import java.util.Properties;
7 |
8 | /**
9 | * @author shuang.kou
10 | */
11 | public class ProducerCreator {
12 |
13 |
14 | public static Producer createProducer() {
15 | Properties properties = new Properties();
16 | properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConstants.BROKER_LIST);
17 | properties.put(ProducerConfig.CLIENT_ID_CONFIG, KafkaConstants.CLIENT_ID);
18 | properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
19 | properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
20 | return new KafkaProducer<>(properties);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/springboot-kafka-03-transaction/src/main/java/cn/javaguide/service/BookProducerService.java:
--------------------------------------------------------------------------------
1 | package cn.javaguide.service;
2 |
3 | import org.springframework.kafka.core.KafkaTemplate;
4 | import org.springframework.stereotype.Service;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import java.util.ArrayList;
8 | import java.util.List;
9 |
10 | /**
11 | * @author shuang.kou
12 | */
13 | @Service
14 | public class BookProducerService {
15 |
16 | private List