kafka基本概念

基本概念

定义

kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域

消息队列

1 传统消息队列的应用场景

同步处理时某个步骤可能较长时间未进行,用户长时间得不到响应。采用异步的方式,消息注册到数据库中之后,马上给用户响应,发送消息的请求写入消息队列中,等待发送消息,这样发送短信的时效性就没这么重要了。

使用消息队列的好处:

  1. 解耦:允许你独立的扩展或修改两边的处理过程,只要确保他们遵守同样的接口约束。
  2. 可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
  3. 缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
  4. 灵活性&峰值处理能力:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的的超负荷的请求而完全崩溃。
  5. 异步通信:很多时候,用户不想也不需要立即处理消息,消息队列提供了异步处理机制,允许用户把一个消息放入队列,但不立即处理它。想向队列中放入多少消息就放多少,然后再需要的时候再去处理他们。

2 消息队列的两种模式

  1. 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息,Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费

  1. 发布/订阅模式(一对多,消费者消费数据之后不会清除消息)

消息生产者(发布)将消息发步到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发步到topic的消息会被所有订阅者消费

kafka基础架构

  1. Producer:消息生产者,负责发布消息到Kafka Broker;
  2. Consumer:消息消费者,从Kafka Broker读取消息的客户端;
  3. Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同 分区的数据,一个分区只能由一个组内消费者消费;消费者之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。同一个组的消费者之间是竞争关系,一个partition被一个消费者消费了,即不会被组内另一个消费者消费;(消费者组主要是kafka实现单播和广播的手段,订阅同一个topic的多个消费者组会收到同样的数据)
  4. broker:Kafka集群包含一个或多个服务实例,这些服务实例被称为Broker
  5. Topic:每条发布到Kafka集群的消息都有一个类别,这个类别称为Topic
  6. partition:分区,Kafka将Topic分为一个或者多个Partition,每个Partition在物理上对应一个文件夹。通过分区可以将一个大的topic分布到多个broker上,一个topic可以分为多个partition,每个partition是一个有序的队列;分区提高同批次并发,提高负载均衡能力。
  7. Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不对是,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower
  8. leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader
  9. follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会称为新的leader
  10. Offset:用于记录当前所消费的消息的位置,为一个long型数字,唯一的标记一条消息。

Topic的Partition数量可以在创建时配置。

Partition数量决定了每个Consumer group中并发消费者的最大数量。

任何发布到此Partition的消息都会被追加到log文件的尾部。

每条消息在文件中的位置称为offset(偏移量),offset是一个long型数字,它唯一标记一条消息,消费者通过offset、partition、topic跟踪记录。

副本以分区为单位,每个分区都有各自的主副本和从副本。

主副本叫做Leader,从副本叫做Follower,处于同步状态的副本叫做In-Sync Replicas(ISR)。

Follower通过拉取的方式从Leader中同步数据,消费者和生产者都是从Leader中读写数据,不与Follower交互。

选择合适的Partition数量。

如何降低集群不可用性,单节点上Partition数目不超过3000;整个集群的分区总数不超过10000。

如何减少端对端的延迟,每个broker的partition数量最好不超过100*broker*replica个。

建议:单个Partition的磁盘占用最大不超过100GB(计算方法:所属Topic的数据流量除以Partition数,然后乘以保存时间)

Kafka将数据按照文件夹和文件的形式存储在Kafka logs目录下

Kafka日志的清理策略:log.cleanup.policy,log.retention.hours,log.retention.bytes。

AR(Assigned Replicas):总的副本数

ISR(In-Sync Replicas):同步的副本数

OSR(Out-Of-Sync Replicas):未同步的副本数

一个Topic有多个Partition分区,每个分区可以有多个Replicas副本,多个副本分布在不同的Broker上,一个分区的多个副本之间都有一个Leader和多个Follower,Follower的作用是冗余备份,Follower从Leader拉取数据进行同步,不管是消费还是生产都只从Leader操作,Follower只做同步。

参考资料

kafka看完这篇就够了

你可能感兴趣的:(kafka,big,data,java)