kafka初识

1.what is kafka

kafka是一个开源的消息队列,其特点:

(1) 快,可以支持几百兆每秒的数据,以及成千上万个client.

(2)   快速扩展

(3)数据都会在磁盘中持久化

2. kafka的特性

IO

  (1) 写只允许append

  (2) 读取操作不会block写操作

  (3)充分利用机械盘的特点,机械臂的移动速度比较缓慢,如果只是用apeend的操作,那么机械臂的摇摆时间就会大量的被缩短,从而节省大量的时间。

Design Strategy

  (1) Pull VS Push

push model :主动去发送消息,比较高的througput,处理比较复杂的服务逻辑。

pull model: 主动推送消息,比较简单的server logic,支持replay消息

概念

Topic and partition

kafka把消息按照topic进行分类,物理上topic使用partition组成,有个partition可以看成是一个队列,一个partition只能属于一个topic

大数据中,单台物理机器的性能不能存储所有的数据,将数据进行分区切割,每个server各自承担一部分自己的职责,提高数据的读写速度。

offset

类似于队列的索引,接收者通过offset定位partition上的消息位置。

两个基本的API接口

publish topic data 写数据

consumer topic data 读数据

produce

发送数据的一方,使用push模型

consumer

接收数据的一方,使用pull模型

consumer group

同一性质consumer放在同一个组中

一个partition只能map到一个组中的一个consumer

log file

kafka的消息都以log file的形式存在,log file不会永久存在,kafka有自己的清理策略,因为kafka只是一个消息队列,默认保存数据的时间为7天,也可以按照文件大小清理。

kafka消息格式

4byte CRC32的校验信息,查看消息是否正确

1byte的‘magic’ value

1byte attribute value

8byte timestamp of ‘magic‘ value is bigger then 1

4byte key length

4byte value length

log file 的格式

一个partition对应一个目录,每个消息存储是还会产生其他的有些字段,8byte offset 4byte message length,每个picycal directory 中有很多file如00000.kfaka数字是文件中的偏移量

在kafka中维护这一个active segment list,记录着offset 范围和对应的文件mapping,delete一个segment file会在segment list 上加一个标志位,标明已经删除,过一段时间会有一个process 一起将其删除。

log file有两种形式,一种是直观的file,一种是压缩的file

IO --zerocopy

操作系统读取文件,并不是直接加载application,而是要切换到CPU的kernel molde ,然后做底层的数据收发,例如,如果我们想要从buffer中读取消息,会需要操作 操作系统将kernel molde 消息读到read buffer中,在切换到user molde读到application buffer进行操作后在加载到socket发送给客户端,kafka采用了zerocopy的形式尽量减少kernel molde到user molde 的切换,直接将read buffer中的消息传递给socket这样就节约时间,加快了效率。

data replication

kafka中的信息会自动的定期复制为多份,放在不同的brock上,replication的单位为partition,partition有leader和follower两种角色,

(1)写是向partition leader写数据

(2)partition leader会将消息写到本地的disk中

(3)follower会定期的向leader pull数据

(4)leader需要等所有的follower向其发ack的确认消息,等所有follower都发送ack,才认为是发送成功

ISR(in-sync replication)

replica 0 是leader 2和3是follower

ISR充分考虑到了sync和sync copy ,sync copy 是指leader 每次收到一条消息,follower 就更新过来,sync copy是指leader持续不断的写,follower持续不断的同步。

ISR 维持这一个水线high water mark 在hign water mark之上的数据用户才能看到,leader持续不断的写数据,将没有返回ack的数据展现给用户的。

原文地址:https://www.cnblogs.com/niumeng007/p/9680747.html

时间: 2024-11-10 14:05:47

kafka初识的相关文章

Kafka 初识

1.Kafka 是什么? 用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统. 倘若“消息引擎系统“这个词对你来说有点陌生的话,那么“消息队列“.“消息中间件”的提法想必你一定是有所耳闻的.不过说实话我更愿意使用消息引擎系统这个称谓,因为消息队列给出了一个很不明确的暗示,仿佛 Kafka 是利用队列的方式构建的:而消息中间件的提法有过度夸张“中间件”之嫌,让人搞不清楚这个中间件到底是做什么的. 像 Kafka 这一类的系统国外有专属的名字叫 Messaging System,国

Kafka【第一篇】Kafka集群搭建

Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是又上游模块产生,上游模块,使用上游模块的数据计算.统计.分析,这个时候就可以使用消息系统,尤其是分布式消息系统! 2.Kafka的定义 What is Kafka:它是一个分布

kafka集群部署文档(转载)

原文链接:http://www.cnblogs.com/luotianshuai/p/5206662.html Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是由上游模块产生,上游模块,使用上游模块的数据计算.统计.分析,这

centos7搭建kafka集群-第一篇

Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是由上游模块产生,上游模块,使用上游模块的数据计算.统计.分析,这个时候就可以使用消息系统,尤其是分布式消息系统! 2.Kafka的定义 What is Kafka:它是一个分布

初识Apache Kafka+JAVA程序实例

本文是从英文的官网摘了翻译的,用作自己的整理和记录.水平有限,欢迎指正.版本是: kafka_2.10-0.10.0.0 一.基础概念 主题:Kafka maintains feeds of messages in categories called topics. 生产者:We'll call processes that publish messages to a Kafka topic producers. 消费者:We'll call processes that subscribe t

初识Kafka

Kafka是什么? 是一个分布式消息系统 类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据. kafka是一个生产-消费模型. 一些名词: Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中.数据的分发策略由producer决定,默认是defaultPartition. Consumer:消费者,订阅消息并处理发布消息. Broker:当前服务器上的Kafka进程,相当于中介,一个Kafka节点就是一个

初识 Kafka Producer 生产者

目录 1.KafkaProducer 概述 2.KafkaProducer 类图 3.KafkaProducer 简单示例 温馨提示:整个 Kafka Client 专栏基于 kafka-2.3.0 版本. @(本节目录) 1.KafkaProducer 概述 根据 KafkaProducer 类上的注释上来看 KafkaProducer 具有如下特征: KafkaProducer 是线程安全的,可以被多个线程交叉使用. KafkaProducer 内部包含一个缓存池,存放待发送消息,即 Pro

初识中间件之消息队列

初识中间件之消息队列 测试那点事儿 测试那点事儿 初识中间件之消息队列 1 消息队列概述 消息队列是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,以实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统中不可缺少的中间件. 目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等,比如我之前用过的RabbitMQ以及kafka. 2 消息队列应用场景 在实际应用中,消息队列常用于异步处理.应用解耦.流量削锋

由内搜推送思考Kafka 的原理

刚入公司的两周多,对CDX项目有了进一步的认识和理解,在这基础上,也开始了解部门内部甚至公司提供的一些中间服务.CDX项目中涉及到的二方服务和三方服务很多,从之前写过的SSO,Auth,到三方图库的各个接口,以及图片存储的云服务Gift,以及今天说到的内搜系统. 由于内搜推送信息是到一个kafka队列中消费,虽然作为业务开发不涉及消息中间件的建设,但还是希望能了解内部选型的一些思想,一点一点学习和理解部门的各个服务.这里我也参加了内部的一些分享,想说说自己对Kafka的初识吧. 首先是Kafka