
Kafka
萝卜头柯克船长
害~
展开
-
Kafka-高性能
1. 架构分区Kafka的主题多分区机制,分区的副本、领导者副本一般均匀地分布在不同的Broker上,实现了并行处理,为Kafka提供了高伸缩性以及负载均衡能力。基于ISR的动态复制方案Kafka既不是完全的同步复制,也不是完全的异步复制,而是基于ISR实现了动态复制方案。同步副本是可变的,这样避免了较慢的副本拖慢整体速度,同时也兼顾了数据一致性。2. 磁盘2.1 零拷贝Kafka需要在磁盘和网络之间传输大量的数据,在传统的非零拷贝场景下,比如使用InputStream和OutputStrea原创 2020-06-21 00:19:19 · 404 阅读 · 0 评论 -
Kafka-可靠性
1. Kafka对可靠性的承诺1. 分区消息的有序性Kafka可以保证同一个分区消息的先入先出。生产者默认的分区策略是轮询+按键哈希映射,在分区数量不变的情况下,具有相同键的消息会被生产到同一个分区。但是需要注意的是,在max.in.flight大于1的情况下,重试可能会导致消息乱序。max.in.flight.requests.per.connection参数表示生产者在收到Broker上一个响应之前可以发送多少个消息批次。当该参数大于1时,重试就可能会导致分区消息乱序。譬如:第一个批次提交失败,第原创 2020-06-21 00:17:15 · 346 阅读 · 0 评论 -
Kafka-Broker
1. 集群成员Kafka使用Zookeeper来管理集群成员(Broker),Broker启动时通过创建临时节点将自己注册到在Zookeeper,Zookeeper会将Broker的变动信息通知给控制器。1.1 控制器控制器是一个Kafka集群中的一个Broker,其作用是在Zookeeper的帮助下管理和协调整个Kafka集群。Zookeeper概述Zookeeper是一个高可靠性的分布式协调框架,核心功能是提供了:文件系统+通知机制。ZK在内存中以树状目录结构存储数据,保证了高吞吐量和低延原创 2020-06-21 00:15:51 · 884 阅读 · 0 评论 -
Kafka-消费者
1. 消费者和消费者群组Kafka引入了消费者群组的概念:一是为了同时实现两种消息引擎模式:点对点的消息队列模式,和发布/订阅模式;二是为了能够横向伸缩消费者消费能力;三是为了构建高可用的消费者集群。群组内的消费者订阅同一个主题,每个分区的所有权只能被一个消费者持有,多余的消费者会处于idle状态。新版Kafka Customer采用了双线程设计:用户主线程和心跳线程,以解耦消息的处理逻辑和存活管理逻辑。消费者的消费请求必须发送给首领副本,否则会收到“非分区首领”的错误,此时消费者需要再次发原创 2020-06-21 00:12:02 · 452 阅读 · 0 评论 -
Kafka-生产者
1. 发送消息主要步骤ProduceRecord对象包含了目标主题和消息内容,也可以额外指定消息键或者分区。调用send()方法后,序列化器首先将消息和键序列化成字节数组,随后将数据传递给分区器。分区器的默认分区策略是:轮询+按键哈希映射。确认分区之后,消息被加入到该分区的一个批次之中,后台的Sender线程负责将消息批次依次发送到对应的Broker上。当消息被成功提交时,Broker会将其偏移量返回;否则,返回错误,生产者在收到错误之后可以选择进行重试。2. 发送消息生产者的生产请求必须发送给首领原创 2020-06-21 00:08:08 · 436 阅读 · 0 评论 -
Kafka-概念
1. Kafka是什么?Kafka是一款开源的消息引擎系统,也是一个分布式的流处理平台,官网对其定位为a distributed streaming platform。作为消息引擎,同时支持两种消息引擎模型:消息队列模型(点对点模型):消息只能被一个系统使用,即每个消息只能被处理一次。发布/订阅模型:存在多个发布者和多个订阅者,消息被广播给所有订阅者。消息引擎的主要作用在于:削峰填谷、系统解耦。作为流处理平台:提供Streams API用以对数据流进行实时计算因此,Kafka主要用于原创 2020-06-21 00:02:31 · 1074 阅读 · 0 评论