认识kafka

kafka

高吞吐量、分布式的发布-订阅消息系统

特性

消息持久化、动态扩容、负载均衡、高吞吐量、可拓展、多语言客户端、kafkastream支持、多种安全机制、可备份、轻量级、可压缩数据。

应用场景

消息系统、应用服务监控系统(kafka+elk)、网站用户行为跟踪(分析日志)、流处理数据。

基本概念

  • 消息单元:message和batch
  • 消息格式:schema
  • 存储模式:topic和partition
  • 客户端:consumer和producer
  • 服务器:broker和cluster
  • topic:主题,每条消息属于一类主题
  • producer:发布消息的对象
  • consumer:订阅消息的对象
  • broker:集群中的某个服务器就是1个broker
  • partition:分区,内部有序,且有offset
  • offset:偏移量,每个分区有自己的offset,被消费后线性增加,consumer也可以指定offset消费。

两种消息模型

1、队列模型

1条消息只能被一个消费者处理,当消费者组只有1个是,kafka就是队列模型。

2、发布-订阅模型

如果所有的消费者都属于不同的消费者组,即每个消费者组只能有1个消费者,这样某条消息就会被每个消费者订阅到,kafka变为发布-订阅模型。

topic

1个topic是一类消息,根据设置可以被分成多个partition,每个partition又由多个文件组成,每条消息在文件中的位置成为offset(long型),消息写入时追加到文件尾部,由于是顺序写磁盘,因此效率非常高(比随机写内存快),从而保证高吞吐。

有序性

1条消息属于一个topic,而一个topic可能由多个partition存储,每个partition内部是有序的,所以要保证某个topic被顺序消费,该topic只能有1个partition。

消费消息,推还是拉?

  • 推:如果推得太快,处理速度跟不上,会积压。如果添加应答、标记数据,太复杂。
  • 拉:消费者不停轮训服务端,记录消费的情况只需要在服务器即可。

zookeeper

每个broker会在zookeeper中注册节点,zk负责保存节点的主题、分区状态、消费组、消费进度、分区的所有者等信息。

消息持久化

Kafka 提供两种删除老数据的策略,一是基于消息已存储的时间长度,二是基于分区的大小。

性能

tips:

  • 客户端与服务端通过tcp协议进行通信。
  • 相同的消费者组中不能有比partition更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。
  • 速度保证:磁盘的预读与后写机制,内存作磁盘缓存。
  • 数据到哪个分区?
    同key在同分区,无key则随机。

猜你喜欢

转载自blog.csdn.net/lk7688535/article/details/80367065