kafka理论

一、消息队列,简称MQ,message queue

生产者:生存数据写到kafka,持久化到硬盘。对同一个Topic来讲,生产者通常只有‘一个’(可以多并发)数据保存时常可以配置,默认保存七天。

消费者:从kafka里消费数据。对同一个Topic来讲,消费者会很多,根据业务需要。

kafka的消息分几个层次:

1)Topic:一类消息,例如page view 日志,click日志等都以topic的形式存在,kafka集群能够负责多个topic分发

2)partition:topic物理上的分组,一个topic可以分为多个partition(默认为2个),每个partition是一个有序的队列。partition中的每个消息都会被分配到一个有序的id(offset,消费位置)。(位置记录在zookeeper中 可以宕机继续消费)

3)Message:消息,最小订阅单元

数据流程:

1、producer根据指定的partition方法(round-robin、hash等【不指定的话内部会自己指定】),将消息发布到指定的topic的partition里面

2、kafka集群接收到producer发过来的消息后,将其持久化到硬盘,并保留消息指定时常(可配置,默认7天),而不关注消息是否是否被消费。

3、Consumer从kafka集群消费(pull)数据,并控制获取消息的offset偏移量。

(kafka消费都采用pull方式,即客户端customer主动拉取数据,客户端控制offset,客户端可以根据需要随时随地进行消费,更加灵活,而且对服务端来讲更加省事)

(push方式为服务端推送数据到客户端,kafka不支持,服务端控制offset)

比如消费同一个topic的作业有100个,如果服务端维护offset很麻烦,增加服务端的工作量。

kafka为何能支持高吞吐量?

1)数据磁盘持久化:消息不存在内存中cache,直接写入磁盘,充分利用磁盘的顺序读写性能,所以borker没内存压力

2)zero-copy:减少IO操作步骤

3)数据批量发送

4)数据压缩

5)Topic划分为多个partition,提高parallelism(并行度)

(如果内存加硬盘不是更快,但是kafka是先进先出,消费旧数据,内存是缓存最新的不适合kafka特性,所以不缓存到内存中)

kafka如何做到负载均衡?

1)producer根据用户指定的算法,讲消息发送到指定的partition

2)存在多个partition,每个partition有自己的replica(副本),每个replica分布在不同的broker节点上

3)多个partition时候需要选取leader partition(通过zk的选举机制),leader partition 负责读写,并由zookeeper 负责fail over(快速失败)

4)通过zookeeper管理broker与consumer的动态加入与离开

时间: 2024-10-10 04:55:32

kafka理论的相关文章

KAFKA安装+配置详解+常用操作+监控

一.kafka理论 1.kafka是神马? kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据.分布式系统,易于向外扩展.所有的producer.broker和consumer都会有多个,均为分布式的.无需停机即可扩展机器. 2.kafka的设计方案 消息持久化及其缓存 磁盘性能:在传统的磁盘写入很慢,因为它使用随机写入 50k/s(6个7200转的

kafka教程

一.理论介绍(一)相关资料1.官方资料,非常详细:?? http://kafka.apache.org/documentation.html#quickstart2.有一篇翻译版,基本一致,有些细节不同,建议入门时先读此文,再读官方文档.若自认英语很强,请忽视:?? http://www.linuxidc.com/Linux/2014-07/104470.htm3.还有一文也可以:http://www.sxt.cn/info-2871-u-324.html其主要内容来源于以下三篇文章:日志:每个

[翻译和注解]Kafka Streams简介: 让流处理变得更简单

Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Kafka Streams还没有正式发布,所以具体的API和功能和0.10.0.0版(2016年6月发布)有所区别.但是Jay Krpes在这简文章里介绍了很多Kafka Streams在设计方面的考虑,还是很值得一看的. 以下的并不会完全按照原文翻译,因为那么搞太累了……这篇文件的确很长,而且Jay

kafka相关知识点总结

1.kafka是什么 类JMS消息队列,结合JMS中的两种模式(点对点模型,发布者/订阅者模型),可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据. kafka是一个生产-消费模型. Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中. 数据的分发策略由producer决定,默认是defaultPartition Utils.abs(key.hashCode) % numPartitions Broker:当前服务器上的Kafka进程.只管数据

架构设计:系统间通信(28)——Kafka及场景应用(中1)

(接上文<架构设计:系统间通信(27)--其他消息中间件及场景应用(上)>) 在本月初的写作计划中,我本来只打算粗略介绍一下Kafka(同样是因为进度原因).但是,最近有很多朋友要求我详细讲讲Kafka的设计和使用,另外两年前我在研究Kafka准备将其应用到生产环境时,由于没有仔细理解Kafka的设计结构所导致的问题最后也还没有进行交代.所以我决定即使耽误一些时间,也要将Kafka的原理和使用场景给读者详细讨论讨论.这样,也算是对两年来自己学习和使用Kafka的一个总结. 4.Kafka及特性

Kafka1 利用虚拟机搭建自己的Kafka集群

前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ===============================================================长长的分割线==================================================================== 正文: 关于Kafka

Kafka数据辅助和Failover

数据辅助与Failover CAP理论(它具有一致性.可用性.分区容忍性) CAP理论:分布式系统中,一致性.可用性.分区容忍性最多只可同时满足两个.一般分区容忍性都要求有保障,因此很多时候在可用性与一致性之间做权衡. 一致性方案 1.Master-slave >RDBMS的读写分离即为典型的Master-slave方案 >同步复制可保证强一致性但会影响可用性(等master确保将数据复制给全部的slave,slave才返回结果) >异步复制可提供高可用性但会降低一致性 2.WNR &g

Kafka的分布式架构设计与High Availability机制

作者:Wang, Josh 一.Kafka的基本概述   1.Kafka是什么? Kafka官网上对Kafka的定义叫:Adistributed publish-subscribe messaging system.publish-subscribe是发布和订阅的意思,所以准确的说Kafka是一个消息订阅和发布的系统.最初,Kafka实际上是LinkedIn用于日志处理的分布式消息队列,LinkedIn的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录.浏览.点击.分享.喜欢

由内搜推送思考Kafka 的原理

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