📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

🌟 Kafka知识点
🍊 Kafka概述
Apache Kafka是一个分布式流处理平台,它能够处理高吞吐量的数据流,广泛应用于日志收集、事件源、流处理等领域。Kafka以其高吞吐量、持久性、可扩展性和容错性而著称。
🎉 Kafka核心概念
以下是对Kafka核心概念的详细描述:
| 概念 | 技术原理 | 应用场景 | 优势与局限 | 实际案例 |
|---|---|---|---|---|
| Topic | 消息分类,类似于数据库中的表,用于将消息进行分类存储 | 日志收集、事件源、流处理等 | 高吞吐量、可扩展性、持久性和容错性 | 日志收集、实时分析、消息队列等 |
| Partition | Topic的分区,用于并行处理消息,提高吞吐量 | 提高吞吐量、实现负载均衡 | 需要考虑分区策略、分区数等 | 消息队列、实时分析等 |
| Broker | Kafka集群中的节点,负责存储数据、处理请求等 | 分布式存储、负载均衡、容错性 | 需要考虑集群规模、节点配置等 | 分布式日志收集、实时分析等 |
| Producer | 生产者,负责向Kafka发送消息 | 日志收集、事件源等 | 高吞吐量、可扩展性 | 日志收集、实时分析等 |
| Consumer | 消费者,负责从Kafka读取消息 | 日志收集、事件源、流处理等 | 高吞吐量、可扩展性 | 日志收集、实时分析、消息队列等 |
🎉 Kafka架构
Kafka采用分布式架构,由多个Broker组成,每个Broker负责存储一部分数据。生产者和消费者通过Zookeeper进行协调,实现分布式系统的负载均衡和容错性。
🍊 Kafka安装与配置
🎉 安装Kafka
- 下载Kafka安装包。
- 解压安装包到指定目录。
- 配置环境变量。
🎉 配置文件解析
Kafka的配置文件主要包括server.properties和producer.properties等。
server.properties:配置Broker的参数,如端口、日志目录、集群配置等。producer.properties:配置生产者的参数,如消息格式、压缩方式、重试策略等。
🎉 集群搭建
- 启动Zookeeper集群。
- 启动Kafka集群。
🍊 Kafka生产者
🎉 生产者配置
生产者配置主要包括消息格式、压缩方式、重试策略等。
| 配置项 | 说明 | 示例 |
|---|---|---|
| key.serializer | 消息键的序列化方式 | org.apache.kafka.common.serialization.StringSerializer |
| value.serializer | 消息值的序列化方式 | org.apache.kafka.common.serialization.StringSerializer |
| bootstrap.servers | Kafka集群地址 | localhost:9092 |
| retries | 重试次数 | 3 |
| batch.size | 批量发送大小 | 16384 |
| linger.ms | 等待时间 | 100 |
🎉 生产者API使用
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<String, String>("test", "key", "value"));
producer.close();
🎉 异常处理
生产者在发送消息时可能会遇到各种异常,如连接异常、序列化异常等。需要根据实际情况进行处理。
🍊 Kafka消费者
🎉 消费者配置
消费者配置主要包括消息格式、消费模式、分区分配策略等。
| 配置项 | 说明 | 示例 |
|---|---|---|
| bootstrap.servers | Kafka集群地址 | localhost:9092 |
| group.id | 消费者组ID | test-group |
| key.deserializer | 消息键的反序列化方式 | org.apache.kafka.common.serialization.StringDeserializer |
| value.deserializer | 消息值的反序列化方式 | org.apache.kafka.common.serialization.StringDeserializer |
| auto.offset.reset | 消费者启动时偏移量重置策略 | earliest |
🎉 消费者API使用
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
Consumer<String, String> consumer = new KafkaConsumer<>(props);
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}
}
consumer.close();
🎉 消费者组
消费者组是一组消费者,它们共同消费同一个Topic的消息。消费者组内部会进行负载均衡,确保每个消费者消费的消息量大致相等。
🍊 Kafka主题管理
🎉 创建主题
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
AdminClient adminClient = AdminClient.create(props);
NewTopic newTopic = new NewTopic("test-topic", 1, (short) 1);
adminClient.createTopics(Arrays.asList(newTopic));
adminClient.close();
🎉 删除主题
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
AdminClient adminClient = AdminClient.create(props);
adminClient.deleteTopics(Arrays.asList("test-topic"));
adminClient.close();
🎉 修改主题
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
AdminClient adminClient = AdminClient.create(props);
ModifyTopicConfig modifyTopicConfig = new ModifyTopicConfig();
modifyTopicConfig.setPartitions(2);
adminClient.modifyTopic("test-topic", modifyTopicConfig);
adminClient.close();
🍊 Kafka消息存储与索引
🎉 消息存储机制
Kafka使用日志文件存储消息,每个日志文件包含多个Segment,Segment由多个Log Entry组成。
🎉 索引机制
Kafka使用索引文件存储Segment的起始位置,以便快速定位消息。
🎉 消息持久化
Kafka将消息写入磁盘,并定期进行压缩,以提高存储效率和性能。
🍊 Kafka事务
🎉 事务概述
Kafka事务用于确保消息的原子性,即要么全部成功,要么全部失败。
🎉 事务API使用
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
TransactionManager transactionManager = producer.initTransactions();
try {
transactionManager.beginTransaction();
producer.send(new ProducerRecord<String, String>("test", "key", "value"));
transactionManager.commitTransaction();
} catch (KafkaException e) {
transactionManager.abortTransaction();
}
producer.close();
🎉 事务状态管理
Kafka事务状态包括未提交、提交、失败等。可以通过Kafka命令行工具或API查询事务状态。
🍊 Kafka连接器
🎉 连接器概述
Kafka连接器是一种用于连接Kafka与其他系统的工具,如数据库、消息队列等。
🎉 连接器配置
连接器配置主要包括源配置、目标配置、转换规则等。
🎉 连接器使用
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
SourceConnector sourceConnector = new SourceConnector();
sourceConnector.start(props);
sourceConnector.stop();
🍊 Kafka监控与运维
🎉 监控工具
Kafka提供JMX、Prometheus、Grafana等监控工具,用于监控集群状态、性能指标等。
🎉 运维策略
- 定期检查集群状态。
- 监控性能指标,如吞吐量、延迟等。
- 定期备份数据。
- 处理故障。
🎉 故障排查
- 查看日志文件。
- 使用监控工具分析性能指标。
- 根据故障现象进行排查。
🍊 Kafka与Spring Boot集成
🎉 集成概述
Spring Boot集成Kafka可以简化开发过程,提高开发效率。
🎉 生产者集成
@Configuration
public class KafkaProducerConfig {
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(kafkaProducer());
}
@Bean
public ProducerFactory<String, String> kafkaProducer() {
Map<String, Object> props = new HashMap<>();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
return new DefaultKafkaProducerFactory<>(props);
}
}
🎉 消费者集成
@Configuration
public class KafkaConsumerConfig {
@Bean
public ConsumerFactory<String, String> kafkaConsumer() {
Map<String, Object> props = new HashMap<>();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
public Consumer<String, String> kafkaConsumer(ConsumerFactory<String, String> kafkaConsumer) {
return kafkaConsumer.createConsumer();
}
}
🍊 Kafka与Spring Cloud集成
🎉 集成概述
Spring Cloud集成Kafka可以实现服务注册与发现、负载均衡等功能。
🎉 服务注册与发现
@Configuration
@EnableDiscoveryClient
public class KafkaDiscoveryClientConfig {
@Bean
public KafkaDiscoveryClient autoDiscoverClient(DiscoveryClient discoveryClient) {
return new KafkaDiscoveryClient(discoveryClient);
}
}
🎉 负载均衡
@Configuration
public class KafkaLoadBalancerConfig {
@Bean
public LoadBalancerClient loadBalancerClient() {
return new KafkaLoadBalancerClient();
}
}
🍊 Kafka与大数据生态圈
🎉 Kafka与Hadoop
Kafka可以与Hadoop生态圈中的工具进行集成,如Hive、Spark等。
🎉 Kafka与Spark
Kafka可以与Spark进行集成,实现实时数据处理和分析。
🎉 Kafka与Flink
Kafka可以与Flink进行集成,实现实时数据处理和分析。

博主分享
📥博主的人生感悟和目标

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇的购书链接:https://item.jd.com/14152451.html
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇繁体字的购书链接:http://product.dangdang.com/11821397208.html
- 《Java项目实战—深入理解大型互联网企业通用技术》进阶篇的购书链接:https://item.jd.com/14616418.html
- 《Java项目实战—深入理解大型互联网企业通用技术》架构篇待上架
- 《解密程序员的思维密码--沟通、演讲、思考的实践》购书链接:https://item.jd.com/15096040.html
面试备战资料
八股文备战
| 场景 | 描述 | 链接 |
|---|---|---|
| 时间充裕(25万字) | Java知识点大全(高频面试题) | Java知识点大全 |
| 时间紧急(15万字) | Java高级开发高频面试题 | Java高级开发高频面试题 |
理论知识专题(图文并茂,字数过万)
| 技术栈 | 链接 |
|---|---|
| RocketMQ | RocketMQ详解 |
| Kafka | Kafka详解 |
| RabbitMQ | RabbitMQ详解 |
| MongoDB | MongoDB详解 |
| ElasticSearch | ElasticSearch详解 |
| Zookeeper | Zookeeper详解 |
| Redis | Redis详解 |
| MySQL | MySQL详解 |
| JVM | JVM详解 |
集群部署(图文并茂,字数过万)
| 技术栈 | 部署架构 | 链接 |
|---|---|---|
| MySQL | 使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群 | Docker-Compose部署教程 |
| Redis | 三主三从集群(三种方式部署/18个节点的Redis Cluster模式) | 三种部署方式教程 |
| RocketMQ | DLedger高可用集群(9节点) | 部署指南 |
| Nacos+Nginx | 集群+负载均衡(9节点) | Docker部署方案 |
| Kubernetes | 容器编排安装 | 最全安装教程 |
开源项目分享
| 项目名称 | 链接地址 |
|---|---|
| 高并发红包雨项目 | https://gitee.com/java_wxid/red-packet-rain |
| 微服务技术集成demo项目 | https://gitee.com/java_wxid/java_wxid |
管理经验
【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718
希望各位读者朋友能够多多支持!
现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目:Java程序员廖志伟
- 🌥 哔哩哔哩:Java程序员廖志伟
- 🎏 个人社区:Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
4347

被折叠的 条评论
为什么被折叠?



