介绍下我写的这个kafka项目,里面做了详细的配置注释已经代码的demo,可供大家学习
项目 | 地址 |
---|---|
springboot-kafka集群项目实战 | kafka集群批量消费数据去重和一致性 |
kafka的几个重要概念
接下来围绕下面几个概念来进行分析
生产者: producer主要是用于生产消息,是kafka当中的消息生产者,生产的消息通过topic进行归类,保存到kafka的broker里面去
消费者:消息消费者,从Broker读取消息的客户端
Topic: Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
partition: kafka当中,topic是消息的归类,一个topic可以有多个分区,
每个分区保存部分topic的数据,所有的partition当中的数据全部合并起来,就是一个topic当中的所有的数据.topic的partition会跨节点分布,
一个topic下的多个partition会分布到不同broker上,每个 partition内部消息是有序的;
比如说broker集群有三个 b0,b1,b2 topic: test 有三个partition ,这样3个partittion就会平均分到三个broker上,每一个broker都会有test主题的一个分区 ,这就是kafka的高扩展性
Broker: 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群。
服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成
ConsumerGroup: 消费者组 每个Consumer属于一个特定的ConsumerGroup,一条消息可以被多个不同的Consumer Group消费,
但是一个 Consumer Group中只能有一个Consumer能够消费该消息
Replicats: 其实就是partition的副本,用于数据同步和容灾,保证了kafka的高可用,
如kafka集群有三个broker节点 b0,b1,b2 topic:test 有两个分区 每个分区有三个副本replicate ,此时应该是2*3=6个分区
如下图 表示分区0 分布到broke0上 分区1 分布到broke1上,而且 分区0的两个副本分布在broke1 和broke2上,可以在kafka的数据目录broker下查看replicate日志
ISR:表示已同步的副本集,如果Leader宕机后会从ISR里面选一个作为Leader Replicate
当把broke1宕机后,再来检查下分区副本Leader以及Isr
Kafka核心总控制器Controller
在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。
当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。
当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责让新分区被其他节点感知到
Kafka的使用场景
● 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
● 消息系统:解耦生产者和消费者、缓存消息等。
● 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
● 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。