首页 > 其他分享 >浅谈Kafka(一)

浅谈Kafka(一)

时间:2024-08-22 22:51:20浏览次数:10  
标签:消费 消费者 broker 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. 生产者决定发送到集群的那个分区中,每条消息都是以键值对的格式。

标签:消费,消费者,broker,Kafka,消息,数据,浅谈
From: https://blog.csdn.net/dolly_baby/article/details/141439935

相关文章

  • 浅谈TCP和UDP协议的区别
    **传输模式**TCP协议:数据流(DataStream)--没有消息边界,比如服务端给客户端发来2048字节大小的数据,而客户端设置的一次最大接收大小为1024,这时候就意味着还有1024没能接收过来,要再接收一次。所以容易出现粘包的情况。所谓粘包,就是数据都粘在一起了。UDP协议:数据报(Da......
  • centos7安装Kafka单节点环境部署一-ZooKeeper安装与配置
    由于Kafka运行需要zookeeper配合,zookeeper需要运行在JVM上,所以需要安装JDK,zookeeper。Kafka从2.0.0版本开始就不再支持JDK7及以下版本,就以CentOS764位JDK8为例1、下载ZooKeeperwgethttps://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.ta......
  • 浅谈面向对象三大特性(着重介绍虚函数实现的多态)
        写在前面:文章内容分享为主,如有不当之处,恳请批评指正。        今天在使用C++的工厂模式的时候,突然发下有些生疏,就想着发一篇博客,巩固一下,但突然想到工厂模式中设计的继承以及多态的特性,决定先发一篇有关于C++多态的文章,其他的就丢给明天吧!一、面向对象三......
  • 时间轮算法理解、Kafka实现
    概述TimingWheel,时间轮,简单理解就是一种用来存储若干个定时任务的环状队列(或数组),工作原理和钟表的表盘类似。关于环形队列,请参考环形队列。时间轮由两个部分组成,一个环状数组,一个遍历环状数组的指针。首先定义一个固定长度的环状数组,队列中的每一个元素代表一个时间格(可以精确......
  • kafka集群扩容
    环境:节点 zookeeper端口 kafka端口 备注172.17.0.81 12181 19092 原有节点172.17.0.82 12181 19092 原有节点172.17.0.83 12181 19092 原有节点172.17.0.90 12181 19092 扩容节点172.17.0.91 12181 19092 扩容节点步骤:一、扩容zookeeper节点#修改配置文件,需注意新节点my......
  • Linux CentOS 7 Kafka 单机版安装
    Kafka从2.6.0开始,默认使用Java11,3.0.0开始,不再支持Java8,详见:https://kafka.apache.org/downloadsProducer:消息生产者,就是向kafkabroker发消息的客户端:Consumer:消息消费者,向kafkabroker取消息的客户端;ConsumerGroup:消费者组,由多个consumer组成。消费者组......
  • 浅谈HTML
    html是一种标签语言,用来写前端页面的,通常结合CSS和js来写。主要用于web开发,B/S架构的系统,所谓B/S其实也是一种特殊的C/S,只不过此时浏览器变成了客户端。B/S架构:B是browser,S是serverC/S架构:C是client,S是server**什么是HTML?**HTML是用来描述网页的一种语言。HTML指的是超......
  • 浅谈Java Spring Boot
    一、基本介绍SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicatio......
  • 浅谈 Java Spring框架
    一、基本介绍Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。二、核心特性依......
  • FLink1.17-Kafka实时同步到MySQL实践
    1.组件版本组件版本Kafka3.7.0Flink1.17.0MySQL8.0.32 2.Kafka生产数据./kafka-console-producer.sh--broker-listhadoop01:9092,hadoop02:9092,hadoop03:9092--topic  kafka_test_table2>{"id":123,"test_age":33}&......