Kafka学习笔记
Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),之后成为Apache项目的一部分。Kafka系统快速、可扩展并且可持久化。它的分区特性,可复制和可容错都是其不错的特性
介绍Kafka前,先来回顾一下消息中间件(MQ)的知识~~
1.消息中间件介绍
- 消息中间件相比大家应该不陌生,一般我们也习惯称之为MQ。它其实没有很高大上,也是一个基于语言开发出的系统,例如像:RocketMQ是阿里巴巴基于Java开发的
- 作用有三:应用解耦、异步处理、限流削峰
- 在市面上,常用的MQ有:ActiveMQ,RabbitMQ,RocketMQ,Kafka
MQ详解及四大MQ比较 - 云+社区 - 腾讯云
2.消息中间件的概念
- 三大核心组件
Broker:消息服务器,作为server提供消息核心服务
Provider:消息提供者
Consumer:消息消费者
- 两大通信模式
发布-订阅模式(也是我工作中所使用的)
点对点模式
Kafka的概念
-
Partition(分区):前面我们提到,可以把Topic理解为一个数据集合,那么一个Topic可以分成多个Partition(区),其中每个区的消息是有序的
若你需要所有消息都是有序的,那么你最好只用一个分区。
另外partition支持消息位移读取,消息位移有消费者自身管理 -
Consumer Group(消费者组):一群消费者的集合。向Topic订阅消费消息的单位是Consumers=ConsumerGroup,只不过Group可以是一个Consumer,也可以是多个
在我的微服务项目开发中,一般把Consumer Group设置成 以 微服务 为单位
关于此图的详细介绍,可以参考官方翻译: https://scala.cool/2018/03/learning-kafka-1/
Kafka的小Demo
- 首先第一步需要安装环境啦,我是使用 Centos + docker + Portainer(Docker UI管理工具)去安装
Kafka需要安装 Zookeeper,Kafka和 Kafka Manager(UI管理页面)
安装也比较简单,步骤可参考:docker下安装kafka和kafka-manager - 简书 - 在Kafka Manager里创建 Cluster(因为Kafka是天然分布式的,都是以集群为单位创建和部署的),然后可以去创建一个 Topic
- 配置Yaml,再分别搭建 Provider 和 Consumer
spring:
# Kafka BeanConfig
kafka:
bootstrap-servers: 192.XXX.XXX.X:9082 # Kafka Broker address
# Kafka Producer Config
producer:
acks: 1
retries: 3 # retry-count
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
# Kafka Consumer Config
consumer: