深入解析kafka 架构原理
kafka 架构原理
01 kafka简介
02 kafka的特性
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
- 可扩展性:kafka集群支持热扩展;
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止丢失;
- 容错性:允许集群中的节点失败(若分区副本数量为n,则允许n-1个节点失败);
- 高并发:单机可支持数千个客户端同时读写;
03 kafka的应用场景
- 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口开放给各种消费端,例如hadoop、Hbase、Solr等。
- 消息系统:解耦生产者和消费者、缓存消息等。
- 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索记录、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
- 运营指标:Kafka也经常用来记录运营监控数据。
- 流式处理
04 kafka架构(重头戏!)



05 对kafka架构的几点解释
- 一个典型的kafka集群中包含若干producer,若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个zookeeper集群。kafka通过zookeeper协调管理kafka集群,选举分区leader,以及在consumer group发生变化时进行rebalance。
- kafka的topic被划分为一个或多个分区,多个分区可以分布在一个或多个broker节点上,同时为了故障容错,每个分区都会复制多个副本,分别位于不同的broker节点,这些分区副本中(不管是leader还是follower都称为分区副本),一个分区副本会作为leader,其余的分区副本作为follower。其中leader负责所有的客户端读写操作,follower不对外提供服务,仅仅从leader上同步数据,当leader出现故障时,其中的一个follower会顶替成为leader,继续对外提供服务。
- 对于传统的MQ而言,已经被消费的消息会从队列中删除,但在Kafka中被消费的消息也不会立马删除,在kafka的server.propertise配置文件中定义了数据的保存时间,当文件到设定的保存时间时才会删除,
- 点对点模式 VS 发布订阅模式
- 消费端 pull 和 push
06 kafka和rabbitMQ对比
|
RabbitMQ |
Kafka |
|
|
开发语言 |
erlang |
scala,Java |
|
架构模型 |
① 遵循AMQP; ② 生产者、消费者、broker。 ③ broker由exchange、binding、queue组成; ④ consumer消费位置由broker通过确认机制保存; |
① 不遵循AMQP; ② 生产者、消费者、kafka集群、zookeeper集群; ③ kafka集群由多个broker节点组成,消息按照topic分类,每个topic又划分为多个partition; ④ broker无状态,offset由消费者指定; |
|
可靠性 |
RabbitMQ可靠性更好,支持事务,支持消息确认机制 |
|
|
高可用 |
采用镜像队列,即主从模式,数据是异步同步的,当消息过来,主从全部写完后,回ack,这样保障了数据的一致性。 |
每个分区都有一个或多个副本,这些副本保存在不同的broker上,其中有且仅有一个分区副本作为leader,其余的作为follower,当leader不可用时,会选举follower作为新leader继续提供服务。 只有leader提供读写服务,follower从leader同步拉取数据然后备份。 |
|
吞吐量 |
kafka更高 |
|
|
是否支持事务 |
支持 |
不支持 |
|
负载均衡 |
需要外部支持才能实现(如:loadbalancer) |
kafka利用zk和分区机制实现负载均衡 |
|
是否支持消费者Push |
不支持 |
支持 |
|
是否支持消费者Pull |
支持 |
支持 |
|
适用场景 |
kafka的优势主要体现在吞吐量上,它主要用在高吞吐量的场景。比如日志采集。 |
具有较高的严谨性,数据丢失的可能性更小,同时具备较高的实时性,用在对实时性、可靠性要求较高的消息传递上。 |
07 kafka吞吐量为什么这么高


到此这篇关于深入解析kafka 架构原理的文章就介绍到这了,更多相关kafka 架构原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Security 使用 OncePerRequestFilter
OncePerRequestFilter是一个过滤器,每个请求都会执行一次;一般开发中主要是做检查是否已登录、Token是否过期和授权等操作,而每个操作都是一个过滤器,下面介绍Spring Security 使用 OncePerRequestFilter 过滤器校验登录过期、请求日志等操作方法,感兴趣的朋友一起看看吧2024-06-06
SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理方式
这篇文章主要介绍了SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08
SpringBoot项目使用slf4j的MDC日志打点功能(最新推荐)
这篇文章主要介绍了SpringBoot项目使用slf4j的MDC日志打点功能,本文通过示例代码给大家介绍非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06


最新评论