kafka

简介

kafka是分布式的,基于发布订阅的消息系统。

主要目标

  • 一时间复杂度为o(1)的方式提供持久化的能力,对于百万级别的数据也能保证常数时间复杂的访问性能。
  • 高吞入率
  • 消息分区,以及分布式消费。同时保证每个Partion内的消息顺序传输。
  • 支持离线数据的处理和试试数据处理。
  • 支持水平扩展

基础概念

一。生产者消费者

对于kafka来说,客户端有生产者和消费者除此之外,还有一些做数据集成的connect api和流式处理的告诫客户端。

二。主题与分区

       

消息以主题(topic)来分类。每一个主题对应着一个消息队列。可以类比于数据库中的表

而,单条道路势必会造成吞吐量的问题。于是引入了分区的概念(partition),这就相当于可以理解为,一个主题下对多了几个通道。

三。Broker和集群。

一个kafka服务器也被称为broker。他接受生产者的消息兵存入磁盘。broker同时服务消费者拉取分区的消息请求,返回目前已经提交的消息。一个broker每秒课以处理成千上万的分区域和百万级别的消息。

当若干个broker组成一个集群,集群中的某一个broker就成为集群控制器。分配区,到broker监控broker的故障等。在集群内一个分区有一个broker掌控,这个broker也被称为这个分区的leader。一个分区也可以被复制到多个broker上,防止故障后数据直接丢失。

 kafka的存储

kafka存在的数据存在文件系统上。

固有印象上磁盘io会很慢,但是现在的操作系统有作相关优化,

        预读,将一块较大磁盘直接读入内存

        操作系统还会将贮存的剩余内存全部都用做磁盘缓存。

当磁盘的访问数序为顺序访问,某些情况下他可能比随机的内存访问都快,甚至和网路速度相差无几。

具体存储

主题topic知识逻辑上的概念,面向消费者生产者,物理上存储的其实是分区partition。每一个分区像一个数组存储着相关消息内容,索引文件等。每一个partition对应的是一个目录。默认情况下创建一个protition。

发布到pritition的消息被追加到pritition的尾部。,每一条消息被发送到broker中会根据分区规则选择分配到哪一个partition。规则合理,所有的消息应该可以均匀的发送。

消费组和重平衡

当消费者离开消费组,他消费的分区会分配给其他分区。这种现象叫做重平衡。再重平衡期间所有消费者都不能消费消息,造成短暂不能用。

通过心跳机制判断消费者有没有活着。

Partition 与消费模型

消息在partition内部是有序的,消息是可以被不同的消费者重复消费的。

消息删除,是通过时间限制。比如设置两天,在此期间任何小组都能消费。两天过后,就算没被消费也会消失。

每一个消费者都会维护一个自己的偏移量,用来记录消费到的位置。

Kafka 是 pull 模型

生产者对broker是push的操作。消费者则是pull的操作。这样一来,消息的流通量,是通过生产者能生产多少和消费者能消费多少。有点像压榨broker发挥最大性能的意思。

Kafka 怎么保证消息的顺序性。

可以让一个主题只有一个partition。这个样子性能就小了。

还可以直接指定自己的消息 key/Partition。放在同一个中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏与ta

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

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

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

打赏作者

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

抵扣说明:

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

余额充值