kafka知识点

kafka知识点
原文链接:https://blog.csdn.net/qq_29186199/java/article/details/80827085 1. Kafka 中的术语 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。 topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。 每个topic又可以拆分成多个partition,每个partition又由一个一个消息组成。 每个消息都被标识了一个递增序列号代表其进来的先后顺序,并按顺序存储在partition中。 producer:往broker中某个topic里面生产数据。 consumer:从broker中某个topic获取数据。 2. topic与消息 kafka将所有消息组织成多个topic的形式存储,而每个topic又可以拆分成多个partition, 每个partition又由一个一个消息组成。每个消息都被标识了一个递增序列号代表其进来的先后顺序,并按顺序存储在partition中。 消息就以一个个id的方式,组织起来。 producer选择一个topic,生产消息,消息会通过分配策略append到某个partition末尾。 consumer选择一个topic,通过id指定从哪个位置开始消费消息。消费完成之后保留id,下次可以从这个位置开始继续消费,也可以从其他任意位置开始消费。 上面的id在kafka中称为offset,这种组织和处理策略提供了如下好处: 1消费者可以根据需求,灵活指定offset消费。 2保证了消息不变性,为并发消费提供了线程安全的保证。每个consumer都保留自己的offset,互相之间不干扰,不存在线程安全问题。 3消息访问的并行高效性。每个topic中的消息被组织成多个partition,partition均匀分配到集群server中。生产、消费消息的时候,会被路由到指定partition,减少竞争,增加了程序的并行能力。 4增加消息系统的可伸缩性。每个topic中保留的消息可能非常庞大,通过partition将消息切分成多个子消息,并通过负责均衡策略将partition分配到不同server。这样当机器负载满的时候,通过扩容可以将消息重新均匀分配。 5保证消息可靠性。消息消费完成之后不会删除,可以通过重置offset重新消费,保证了消息不会丢失。 6灵活的持久化策略。可以通过指定时间段(如最近一天)来保存消息,节省broker存储空间。 7备份高可用性。消息以partition为单位分配到多个server,并以partition为单位进行备份。备份策略为:1个leader和N个followers,leader接受读写请求,followers被动复制leader。leader和followers会在集群中打散,保证partition高可用。 3、Partitions 每个Topics划分为一个或者多个Partition,并且Partition中的每条消息都被标记了 一个sequential id ,也就是offset,并且存储的数据是可配置存储时间的. 数据备份:以partition为单位备份,副本数可设置。当副本数为N时,代表1个leader,N-1个followers,followers可以视为leader的consumer,拉取leader的消息,append到自己的系统中 4、producer producer生产消息需要如下参数: topic:往哪个topic生产消息。 partition:往哪个partition生产消息。 key:根据该key将消息分区到不同partition。 message:消息。 5、consumer 传统消息系统有两种模式: 队列 发布订阅 kafka通过consumer group将两种模式统一处理: 每个consumer将自己标记consumer group名称,之后系统会将consumer group按名称分组, 将消息复制并分发给所有分组,每个分组只有一个consumer能消费这条消息。 于是推理出两个极端情况: 当所有consumer的consumer group相同时,系统变成队列模式 当每个consumer的consumer group都不相同时,系统变成发布订阅 consumer存在两种消费模型: push:优势在于消息实时性高。劣势在于没有考虑consumer消费能力和饱和情况,容易导致producer压垮consumer。 pull:优势在可以控制消费速度和消费数量,保证consumer不会出现饱和。劣势在于当没有数据,会出现空轮询,消耗cpu。 kafka采用pull,并采用可配置化参数保证当存在数据并且数据量达到一定量的时候,consumer端才进行pull操作,否则一直处于block状态。kakfa采用整数值consumer position来记录单个分区的消费状态,并且单个分区单个消息只能被consumer group内的一个consumer消费,维护简单开销小。消费完成,broker收到确认,position指向下次消费的offset。由于消息不会删除,在完成消费,position更新之后,consumer依然可以重置offset重新消费历史消息。 消息发送语义 producer视角 消息最多发送一次:producer异步发送消息,或者同步发消息但重试次数为0。 消息至少发送一次:producer同步发送消息,失败、超时都会重试。 消息发且仅发一次:后续版本支持。 consumer视角 消息最多消费一次:consumer先读取消息,再确认position,最后处理消息。 消息至少消费一次:consumer先读取消息,再处理消息,最后确认position。 消息消费且仅消费一次。 原文链接:https://blog.csdn.net/qq_29186199/java/article/details/80827085

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小金子的夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值