https://mp.weixin.qq.com/s/zxPz_aFEMrshApZQ727h4g 《kafka系统设计》
https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html 《kafka架构》
1. 重要概念和原理
1)producer (采用推模式)和 consumer(采用拉模式,拉模式可以更灵活的控制消费速率) 只跟 leader 交互,leader是某个topic partition leader所在的broker,问题来了,producer和consumer怎么知道topic partition在哪个broker,其实是每个broker都有这些信息,并且client端也会存储这个信息(是不是跟Jedis(Redis Cluster)相似, 对有 smart client 设计理念)
2)controller相当于是leader broker,主要负责 topic partition leader的选举和一些failover
2. 生产流程中架构设计
1)partition leader 通常会有一些follower, follower 会定期从leader拉数据(不采用leader推送给follower的原因是这样可以减轻leader的工作,毕竟leader还要跟生产和消费交互),leader通过单独的心跳线程检查follower存活,会维护一个ISR(In-Sync-Replicas)即只有follower offset跟leader差距在容忍范围内时,才可以在ISR队列,ISR信息存储在ZK上,每个topic partition的leader信息也存在ZK
2)HW(High Water) 是consumer可见的最大offset,其实是partition leader 和follower的最小的LEO,HW还是leader重新选举时需要用到的
3)LEO(LogEndOffset) 当前写入的最大offset
4)生产相关重要参数
a)request.required.acks 0-表示不等待leader 1-表示leader写入自己LEO后返回 -1-表示leader要等所有的ISR写入LEO再返回,要根据业务情况综合考虑,我们大部分场景是配置0
b) linger.ms 强制至少在这个时间后producer发送消息
c) buffer.memory 满足这个size后,producer才会发送消息,以上两个参数配合发送消息,保证吞吐率
5) leader高可用,leader信息会注册在ZK(Controller会watch这个节点),leader挂掉,Controller会第一时间从ISR中选择一个作为leader,如果ISR都挂了,则从其他follower里面选
3. 消费流程中的架构设计
注意 consumer client本身是单线程设计,所有的coordinator、rebalance、heartbeat等都是通过poll函数内部实现,由于是单线程,并没有锁出现
1)Consumer是通过Consumer Group做隔离的,可以认为 不同 Consumer Group的消费者是没关系的;在同一个Consumer Group中,每个topic partition只能被唯一一个consumer消费,
优点:这样可以保证同一个partition数据是顺序消费的,每个consumer不用都跟大量的broker通信,减少通信开销,同时也降低了分配难度,实现也更简单
缺点:这样设计的劣势是无法让同一个consumer group里的consumer均匀消费数据
注意:consumer数量多于partition数量,多余的consumer不会消费,但是consumer数量少的话,一个consumer是可以消费多个partition的
2)每个consumer是单线程拉取信息的,老版本消费offset上报之前是存到ZK,新版本后来为了去除zk依赖(因为zk不适用高并发下读写,并且有herd和split brain问题),现在offset是会上报给一个固定的topic里(是的,offset会在topic里并存在broker里),存储offset原因是当consumer重启或者rebalance,可以知道从哪里开始继续消费,默认消费规则是 latest,即从最新的消费offset继续;还可以有其他情况定制 earliest方式,比如想重新消费某个topic,可以把consumer先全停掉,然后把consumer offset置零,并设置earliest方式,就可以重新消费了
3)何时上报offset?若拉取后马上上报,可能会因为consumer挂掉而导致消息未消费;若消费完成再上报,上报时消费者挂掉,可能会造成重复消费
4)consumer高可用怎么做到的?老版本是zk监控并通知给Controller进行rebalance;新版本是会为每个consumer group分配一个broker作为group coordinator, group coordinator(下面简称GC)主要负责consumer group的offset管理、维持heartbeat、加入或离开group,GC会选择一个consumer作为leader,leader会决定如何rebalance,由client端进行rebalance可以进一步减轻server的负担且更为灵活(但是流程复杂性会加大,GC发现某个consumer心跳超时会通知consumer leader,由consumer leader决定如何rebalance并上报给GC,其他consumer同GC通信时拿到rebalance信息)
4. Controller如何保证高可用的
controller节点会注册在ZK,所有broker监听这个节点,一旦挂掉,所有broker会竞争创建controller节点并且只有一个成功,成功的节点成为新的Controller
相关推荐
Kafka的ARM版本使得这些设备能够直接处理数据流,减少了数据传输延迟,提高了整体效率。 4. **安装与配置** 安装kafka_2.11-1.1.0-aarch64通常涉及解压文件,配置配置文件如server.properties,设置broker ID、...
大数据整体架构图,是指一个综合的数据处理和分析系统,涵盖了数据采集、存储、处理、分析和应用等方面。该架构图包括了多个组件和技术栈,旨在提供一个完整的数据处理和分析解决方案。 以下是该架构图的主要组件和...
Kafka 的整体架构非常简单,producer、broker(Kafka)和 consumer 都可以有多个。Producer,consumer 实现 Kafka 注册的接口,数据从 producer 发送到 broker,broker 承担一个中间缓存和分发的作用。broker 分发...
总结来说,这个微服务架构利用Redis作为高速缓存,MySQL进行数据存储,Mycat实现数据库读写分离,Zookeeper提供分布式协调,Kafka处理消息传递,整体上构建了一个高效、稳定、可扩展的系统。这种架构设计考虑了服务...
- **安全性**:增强了对SASL(简单认证与安全层)的支持,使得Kafka可以更好地集成到企业级安全架构中。 - **性能优化**:通过减少锁竞争、提高压缩效率等手段提升了整体性能。 - **稳定性提升**:修复了多个可能...
生产者(Producer):消息和数据生产者代理(Broker):缓存代理,Kafka的核心功能消费者(Consumer):消息和数据消费者整体架构很简单,Kafka给Producer和Consumer提供注册的接口,数据从Producer发送到Broker,...
这种分布式架构使得Kafka能够处理大规模的实时数据流。 2. **高吞吐量**:Kafka设计时考虑了高性能,能够处理每秒数十万条消息,这使其在大数据实时处理场景中表现出色。 3. **持久化与容错**:Kafka将消息存储在...
KafkaTool2-64bit是一款专为Kafka设计的强大管理工具,它以其64位架构提供了高效、稳定且用户友好的界面,使得对Apache Kafka集群的管理和监控变得更加简单。这款工具面向的是对大数据处理和消息队列系统有深入需求...
- 高性能与高吞吐量:相较于传统的消息队列系统,Kafka通过减少复杂性提高了系统的整体性能。 - 可扩展性:Kafka支持水平扩展,能够轻松应对大规模数据流的需求。 #### 四、总体架构 - **系统架构图**: - ...
4. **水平扩展**:Kafka支持水平扩展,可以通过增加更多的节点来提升系统的整体处理能力。 5. **灵活订阅**:Kafka支持多种订阅模式,包括“发布/订阅”模式和“队列”模式等。 6. **丰富的API接口**:Kafka提供了...
在使用Cmak-3.0.0.5时,管理员应熟悉Kafka的基础知识,包括Kafka的架构、消息模型、配置选项以及最佳实践。同时,理解Cmak的各个功能模块和操作流程,将有助于更好地管理和维护Kafka集群,确保数据流的高效和稳定。
标题中的"kafka_exporter-1.6.0.linux-amd64.tar.gz"是一个针对Linux AMD64架构的Kafka Exporter版本1.6.0的压缩文件,通常用于在Prometheus监控环境中收集和暴露Kafka集群的度量数据。 Kafka Exporter是一款开源...
2. **Kafka架构**:Kafka由Brokers、Producers、Consumers、Topics和Partitions组成。Brokers是Kafka集群的节点,负责存储和转发消息;Producers负责生产消息;Consumers消费消息;Topics是逻辑上的分类,而...
### Kafka学习之路——详解Kafka原理与架构 #### 一、Kafka简介 Kafka是一款由LinkedIn开发并开源的消息队列系统,它主要用于处理实时数据流,并能够支持在线和离线的日志处理需求。Kafka的基本特性包括高吞吐量、...
### 二、Kafka架构详解 1. **基本组件**: - **Producer(生产者)**:负责发布消息到Kafka Broker。 - **Broker(服务器)**:Kafka集群包含一个或多个Broker,这些Broker是集群中的服务器节点,负责处理来自...
整体而言,《深入理解Apache Kafka-初稿》为读者提供了一套全面、系统的Kafka知识体系,从基础概念到安装部署、监控优化,再到源码分析和架构剖析,内容丰富,覆盖了Kafka应用开发和维护的方方面面。对于希望深入...
1. **安全概述**:介绍 Kafka 安全框架的整体架构。 2. **加密与认证**:通过 SSL 协议实现数据加密传输和双向认证。 3. **授权与 ACLs**:定义了访问控制列表,控制用户对资源的操作权限。 4. **安全特性集成**:...
#### 三、Kafka的基础架构 **1.3 Kafka基础架构** 1. **Kafka集群架构** - Kafka集群由多个Broker组成,Broker是Kafka的核心服务节点,负责存储和管理消息。每个Broker可以包含多个分区,每个分区代表了特定主题...
#### 二、整体架构设计 Kerberos 的部署通常需要一个中心化的 KDC (Key Distribution Center) 服务器和其他多个客户端节点。KDC 负责管理所有的密钥,而客户端则用于进行身份验证。在本方案中,我们选择一台主机作为...
**Kafka 架构** 包括三个核心组件:**Producer** (生产者)、**Broker** (代理) 和 **Consumer** (消费者)。 1. **Producer (生产者)**: 负责生成消息并发送到 Broker。生产者可以指定消息的主题(topic)。 2. **...