Kafka卡夫卡详解


参考:https://www.cnblogs.com/shijiaoyun/p/4860734.html?tvd=&from=timeline&isappinstalled=1


Kafka设计方式

Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。

独特设计方式:
在这里插入图片描述
Topic:对一组信息的归纳,消息以topic为单位进行归纳
Producer:向Kafka发布消息的程序
Consumer:预订topics并消费消息的程序

Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.
producers通过网络将消息发送到Kafka集群,集群向消费者提供消息


Topics

对每个消息,Kafka对其日志进行了分区:
在这里插入图片描述
每个分区都由一系列有序的、不可变的消息组成,这些消息被连续的追加到分区中。分区中的每个消息都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息(consumer来维护:一般情况下随着consumer不断的读取消息,这offset的值不断增加,但其实consumer可以以任意的顺序读取消息,比如它可以将offset设置成为一个旧的值来重读之前的消息)。

分区目的:每个日志小,可在单个服务上保存,每个分区可以单独发布和消费
–> 并发
–> 分布式:

  • 每个分区在Kafka集群的若干服务中都有副本,持有副本的服务可以共同处理数据和请求
  • 每个分区都由一个服务器作为“leader”,零或若干服务器作为“followers”,leader负责处理消息的读和写,followers则去复制leader(如果leader down了,followers中的一台则会自动成为leader。集群中的每个服务都会同时扮演两个角色:所持有的一部分分区的leader,同时作为其他分区的followers,集群就会据有较好的负载均衡。)

Producers

Producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。

通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区(通常更多)。

Consumers

发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。

  • 队列模式
    consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到
  • 发布-订阅模式
    消息被广播到所有的consumer中;
    Consumers可以加入一个consumer ,共同竞争一个topic,topic中的消息将被分发到组中的一个成员中。
    在这里插入图片描述
    Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的。如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka的offset是用来标识消息在分区中的位置的。每个分区都有一个对应的offset,用于记录消费者已经读取的消息位置。当消费者消费消息后,会向Kafka的broker中的一个专门维护每个消费者offset的topic发送一条消息,记录自己当前已读的消息的offset+1的值作为新的offset的消息。这样,下次消费者继续消费时,就可以从上次消费的位置继续读取消息。\[1\] Kafka的分区数据在磁盘上划分为多个segment,每个segment由索引文件和数据文件两个文件组成。每个segment文件根据设定的配置,最多存储相同大小的消息。每一个segment的文件都以自己文件里存储的第一消息的上一个offset作为文件名,这样可以更加灵活地分片存储以及快速查找。\[2\] Kafka将不同分区放到不同的broker上,其中一台作为leader,其他为isr(in-sync replicas)或者不在isr中。Kafka的leader负责写入消息,isr的其他成员异步地去同步这些消息。当isr中的所有成员都成功同步了这条消息时,这条消息对于消费端才可见。Kafka使用一个高水位(high watermark)来表示消费者所能读取到的最大的下一个offset。当leader接收到消息后,会先判断isr中成员的offset,如果不是最大+1,代表isr中有成员还没有接收到这条消息,则不会更改高水位。只有当isr中的每台机器的offset都比leader大1时,leader才会更新高水位,并将更新高水位的消息发送给isr中的follower。如果有follower宕机,会被剔除出isr,所以最坏情况下也会将所有follower都剔除,只对自己更新高水位。其他broker在重新加入集群后再同步消息。\[3\] #### 引用[.reference_title] - *1* *2* *3* [kafka的offset理解](https://blog.csdn.net/weixin_44627989/article/details/104891945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值