浅谈Kafka(一)

浅谈Kafka(一)

文章目录

消息队列中间件就是用来存储消息的软件。举个例子来说,为了分析网站的用户行为,我们需要记录用户的访问日志。这些日志可以看成是一条条的消息,我们可以将它们保存到消息队列中。将来有一些应用程序需要处理这些日志,就可以虽是将这些日志取出来处理。

Kafa的设计是什么样的

  1. Kafka把消息以主题topic为单位进行归纳,把向发布消息的程序称为生产者producer,订阅主题并消费消息的程序称为消费者consumer。
  2. Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker。生产者通过网络把消息发送给Kafka集群,集群向消费者提供消息。

数据传输的事务定义

数据传输的事务定义通常有最多一次、至少一次、精确的一次三种。

  1. 最多一次是消息不会被重复发送,最多被传输一次,但也可能一次都不传输。
  2. 至少一次是消息不会被漏发,至少被传输一次,但也可能会被重复传输。
  3. 精确的一次是不会漏发也不会重复传输,每个消息都被传输一次。

消息队列的应用场景

  1. 异步处理,比如电商网站中,新用户注册时,需要将用户信息存储在数据库中,同时还需要额外发送注册的邮件通知,以及短信注册码给用户。但是因为发送邮件、发送短信注册码需要连接外部服务器,需要额外等待一段时间。此时,就可以使用消息对来来进行异步处理,从而实现快速响应。

  2. 应用解耦

  3. 流量削峰

  4. 日志处理

Kafka怎么样判断节点是否存活

  1. 节点必须可以维护和zookeeper的连接,zookeeper通过心跳检测机制检查每个节点的连接。
  2. 如果节点是follower,则必须能够及时同步leader的写操作,延迟不能太久。

Kafka的消息是采用pull模式还是push模式

  1. 消费者从broker拉取消息是pull模式,而broker把消息推送给消费者是push模式。Kafka采用的设计是生产者把消息推送到broker,消费者从broker拉取消息。
  2. 一些消息系统比如Apache Flume采用了push模式,把消息推送到下游的消费者。由broker决定消息推送的频率,对于不同消费速率的消费者就不太好处理了。消息系统都致力于让消费者以最大速率消费消息,但是push模式下,当broker的推送速率大于消费者的消费速率时,消费者可能要崩溃了,最终Kafka采取了pull模式。
  3. pull模式好处是消费者可以根据自己的消费能力决定是否批量的从broker拉取消息;缺点是如果broker没有可供消费的消息,会导致消费者不断在循环中轮询,直到新消息到达。Kafka可以通过设置参数让消费者阻塞直到新消息到达。

Kafka在磁盘上的消息格式

  1. 消息由一个固定长度的头部和可变长度的字节数组组成,头部包含了一个版本号和CRC32校验码。消息长度有4bytes,值为(1+4+n)。版本号占1byte,CRC校验码占4bytes,具体的消息占nbytes。

Kafka高效文件存储设计特点

  1. Kafka把topic中一个partition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完的文件,减少磁盘占用。
  2. 通过索引信息可以快速定位message和确定response的最大大小。
  3. 通过index元数据全部映射到memory,避免段文件的IO磁盘操作。
  4. 通过索引文件稀疏存储,可以降低index文件元数据占用空间大小。

Kafka与传统消息系统之间的区别

  1. Kafka持久化日志可以被重复读取和无限期留存。
  2. Kafka是一个分布式系统,以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性。
  3. Kafka支持实时的流式处理。

Kafka的分区数据怎样保存到磁盘

  1. 主题中的多个分区以文件夹的形式保存到broker,每个分区序号从0递增并且消息有序。分区文件夹下有多个段segment文件(.index,.log)。段文件里的大小和配置文件大小一致可以根据需要进行修改,默认为1g,如果大于1g,就会滚动一个新的段并且以上一个段最后一条消息的偏移量命名。

Kafka消费者如何消费消息

  1. 消费者每次消费数据时,记录消费的物理偏移量offset的位置,等到下次消费时,会接着上次位置继续消费。

消费者负载均衡策略

  1. 一个消费者组中的一个分片对应一个消费者成员,它能保证每个消费者成员都能访问,如果组中的成员太多会有空闲的成员。

数据有序

  1. 一个消费者组中的内部是有序的,消费者组和消费者组之间是无须的。

Kafka生产数据时数据的分组策略

数据有序

  1. 一个消费者组中的内部是有序的,消费者组和消费者组之间是无须的。

Kafka生产数据时数据的分组策略

  1. 生产者决定发送到集群的那个分区中,每条消息都是以键值对的格式。
相关推荐
道一云黑板报3 小时前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
qq_5470261793 小时前
Kafka 常见问题
kafka
core5123 小时前
flink sink kafka
flink·kafka·sink
飞来又飞去5 小时前
kafka sasl和acl之间的关系
分布式·kafka
MZWeiei6 小时前
Zookeeper的监听机制
分布式·zookeeper
莹雨潇潇6 小时前
Hadoop完全分布式环境部署
大数据·hadoop·分布式
浩哲Zhe7 小时前
RabbitMQ
java·分布式·rabbitmq
明达技术7 小时前
分布式 IO 模块:赋能造纸业,革新高速纸机主传动
分布式
Allen Bright8 小时前
RabbitMQ中的Topic模式
分布式·rabbitmq
李洋-蛟龙腾飞公司9 小时前
HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据
分布式·华为·harmonyos