Kafka基础概念
1.kafka概念
Producer:生产消息实例
Broker:管理和存储消息服务端服务器
Consumer:消费消息的实例
Record:kafka系统中的消息
2.kafka概念-主题
topic:主题,消息的类别
主要用于区别一个broker(服务器)中的不同消息的类别,方便于Consumer去订阅不同的主题,消费对应主题的消息
3.kafka概念-消费者和分区
当生产者生产消息数量过多,单机消费者无法满足消费需求,但是消费多机部署会产生重复消费消息。
原因:每个consumer无法区分消费了哪些消息。
解决方案:将topic做更细粒度的划分,叫做Partition,让每个partition只让一个消费者消费,那么就不会造成多个消费者消费同一条消息的情况了。
Partition:实际消息存储的地方,有序的队列。
Offset:偏移量,Record在Patition中的位置。
ConsumerGroup:共同处理消息的一组消费者实例。
但是在Partition之后,还是会造成消息重复消费的问题:
kafka重复消费消息的原因:已经消费了数据,但是offset并没有提交
kafka消息重复消费很大一部分原因是在于发生了再均衡
1)消费者宕机,重启等,导致消息已经消费,但是没有提交offset,那么offset就还是消息消费之前的offset,下一次消费者来消费,就会消费上次已经消费的消息。
2)消费者使用自动提交offset,但当还没有提交的时候,有新的消费者加入或移除,发生了rebalance。再次消费的时候,消费者会根据提交的偏移量来,于是重复消费了消息。
3)消息处理耗时,或者消费者拉取的消息量太多,处理耗时,超过了max.poll.interval.ms的配置时间,导致认为当前消费者已经死掉,触发了rebalance。
Rebalance:Broker为Consumer重新分配Partition的一个过程。
4.kafka概念-位点
场景:随着时间的增加,消息占用了很多磁盘空间。
解决方案:消息总量达到了设置大小,或者设置时间,就删除这些消息。
在Partition中有三个概念:
earlistOffset:第一条有效的消息的Offset,也就是消费者开始消费这个Partition时的第一条消息
GroupOffset:ConsumerGroup中的对应的消费者所消费到的Offset。
latestOffset:最后一条数据的Offset
5.kafka概念-Replication&Cluster
场景:机器故障,该机器上的消息丢失
解决方案:部署多台Broker,消息根据partition在不同机器之间进行备份
集群:一组broker组成集群
Replication:消息的备份