Kafika

Kafika

kafka 是由LinkedIn开发的分布是消息系统,kafka使用Scala实现,被用作LinkedInde的活动和运营数据处理管道,现在也被诸多互联网企业广泛地用作数据流管道和消息系统
Kafka是基于消息发布-订阅模式实现的消息系统,其主要设计目的如下

  1. 消息持久化,事件复杂度为O(1)的方式提供消息的持久化能力,即使对TB级以上的数据也能保证常熟时间复杂的访问性能。
  2. 高吞吐,在廉价的商用机器上也能支持单机每10w以上的吞吐量
  3. 分布式,支持消息分区以及分布式消费,并保证分区内的消息顺序。
  4. 跨平台,支持不同技术平台的客户端如java,PHP,Python等
  5. 实时性,支持实时数据和离线数据处理
  6. 伸缩性,支持水平扩展。
1. KafKa的基本概念
  1. Broker kafka集群包含一个或多个服务器,这些服务器被称为Broker
  2. Topic 主题,逻辑上同Rabbit Mq的队列相识,每条发布到Kafka集群的消息都必须有一个Topic。(物理上不同的Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个Broker上,但用户只需指定消息的Topic即可生产消息或消费消息,而不用关系消息存于何处)
  3. Partition partition是物理概念上的分区,为了提供系统的吞吐率,在物理上每个Topic会分成一个或多个Partition,每个Partation对应一个文件夹(存储分区的消息内容和索引文件)
  4. Producer 消息消费者,负责生产消息并发送到Kafka Broker上。
  5. Consumer 消息消费者,向Kafka Broker读取消息并处理消息。
  6. Consumer Group 消费者组,每个Consumer都属于特定的组(可为每个Consumer指定属于一个组,若不指定者属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。
2. Kafka中的分区
  1. 在kafka中会将每个topic中的数据进行分区(分区的数据量根据分区数来定),每个分区的的数据都可以有对应的备份数量(备份的数量由分区因子来定)。
  2. 在kafka集群中,会指定一台Broker负责一个分区读于写(Leader),其他存储分区副本的Broker(Follower)可以负责数据的读取,但不能进行数据的写入。
3. Kafka中的消费者与消费者组
  1. 在Kafka中每个消费者都必然属于某一个消费者组,如果消费者没有指定所属的消费者组
  2. kafka对消费者的管理是按组管理的,如果一个消费者组订阅了某个topic,那么kafka首先会根据消费者组的的消费者数量进行分配,topic中某分区的数据由,消费者组的某个消费者消费,其该分区的消息的数据只会被该消费者消费,不会被其他消费者消费即,同一topic中的某个分区的消息,对与同一分组的消费者来说,只能被该分区的莫一个消费者消费。(一个消费者可能同时消费多个分区的消息,但一个分区的消息只能被一个消费者消费),这样就可以保证同一消费者组中,不存在消息的重复消费。
4. Kafka中的高性能之道
  1. 顺序写 kafka在将数据持久化到磁盘时,为了避免磁盘写入数据时的随机写入,使用了顺序写的方式,来避免磁盘来回寻道而带来的性能开销
  2. 内存页映射文件Memory Mapped Files(mmap) kafka在接收到用户发来的消息时,并不是立即写入到磁盘中,而时在内核空间中开辟一个内存空间,将数据写入到这个内存空间中就算是写入完成,具体什么时候将数据写到磁盘,由系统内核来管理,这样就可以保证,数据的持久化接近于内存的数据写入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值