首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kafka学习笔记

作者:张大胖007

来源:csdn博客

链接:

要解决的问题

1 存储数据

2 重复消费

将数据的生产和消费分开 (异步通信)

保证顺序

缓冲

Kafka 重要的消息组件

生产者

消费者

消费者组

Topic

Kafka对消息保存时,根据Topic 归类

Broker

一个Kafka实例称为一个Broker

partition

一个大的Topic 可以分为多个partition,用来做负载均衡。一个partition中的数据是有序的,不能保证多个partition之间的数据有序。如果数据必须有序,就放到一个partition中

offset

有几个Broker,最多就有几个备份。

kafka 消费是以消费者组为单位的(一个消费者,也是放在消费者组中的)。 一个消费者组消费一个topic 的数据,消费者组中不同消费者 只能 消费不同分区的数据。一个消费者只能消费 一个分区的数据。

如果一个topic 有两个分区,三个消费者来消费的话,有一个消费者什么也不做。 只能增加分区,才有用。

如果一个topic 有三个分区,两个消费者,后面突然再增加一个消费者,会引发再平衡。

一个topic 可以由多个分区组成,一个消费者只能消费一个分区。

生产者和 zookeeper 不会产生直接的联系。 生产者需要得到 分区信息,但是 因为kfaka 集群和zookeeper 一直 有连接,生产者直接访问集群的时候,就可以获取到zk中的信息。

消费者需要连接zookeeper, 因为需要维护offset 并且需要不断更新到 zookeeper中。 同时还要把 消费者消费的哪个分区的数据 这种对应关系 提交到zookeeper。

Kafka 使用零复制技术提高传输效率 (数据不会读取到应用层,直接通知操作系统,完成相应的操作),另外Kafka 顺序写磁盘效率(PageCache )比随机写内存要高,保证了Kafka的吞吐量。 预读 和后写 技术 也是为了提高吞吐量。

分区的原则

(1)指定了patition,则直接使用;

(2)未指定partition但指定key,通过对key的value进行hash算出一个patition;

(3)patition和key都未指定,使用轮询选出一个patition

每个partition 可以有多个副本,副本有一个 leader,其他为follower(只负责从leader 中同步数据)。 producter和consumer 只与leader 交互。 如果partition 没有副本,当broker 挂掉后,该broker 上 partition 的数据不能被消费,同时生产者也将不能往该borker 上 的partition 上面存放 数据。

kafka 写数据流程

生产者连接kafka集群,集群通过连接zookeeper获取到分区信息,把它返回给生产者

生产者拿到分区信息后,会启动sender 线程,使用双端队列来向kafka 集群发送数据

kafka 集群中是否收到消息,基于ack 应答机制

0: 集群无需应答,即可发送下一条,性能非常好,但是可能会丢失数据,不安全。

1:集群中只需要Leader应答即可发送下一条,性能稍微差一下,而且数据可能会丢失。

-1(all):集群中所有的备份都需要应答方可发送下一条数据。性能最差,但是数据不会丢失

HW : 高水位,是消费者在当前分区中能够读取的最大偏移量

LEO : Log End Offset,当前broker日志中最后存储的数据偏移量

kafka 会保存一定大小的数据和一定时间类的数据,是否删除历史数据不会影响kafka 性能。

kafka 消费数据流程

消费者从 zookeeper 中获取分区信息,zookeeper 返回分区信息给生产者

生产者从分区中拉取数据进行消费。

以上offset 会保存在zookeeper中

消费者也可以不连接zookeeper,直接从集群中获取每个topic 分区信息,这样offset 也会保存到kafka 集群中

一个消费者可以读取多个分区的数据,但是一个分区的数据只能属于某一个消费者。

---------------------

喜欢就点击“好看”吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190120B08OCO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券