《Kafka权威指南》读书笔记——生产者、消费者

一、Kafka基本概念

Kafka是分布式日志系统、分布式流平台,按序持久化,消费者按需读取。Kafka 的数据单元被称为消息,可以理解为数据库的一行,为了提高效率,消息被分批次写入Kafka ,批次就是一组消息(通常我们所说的batch_size就是批次大小),需要在时间延迟和吞吐量之间做权衡,选择合适的batch_size。消息写入分区时用到,一般取键的hash,对分区数取模,保证相同键的消息落在同一分区上

Kafka的主题包含若干个分区,消息以追加的方式写入分区,只能在分区维度保证消息有序性。Kafka通过分区来实现数据冗余和伸缩性,即一个主题可以横跨多个服务器。

生产者一般并不关心消息写入哪个分区,会均衡的将消息分布在主题的各个分区上,也可以通过键和分区器将消息指定到某一分区。

消费者通过偏移量消费消息,偏移量是另一种元数据,它是一个不断递增的整数值,在创建消息时, Kafka 会把它添加到消息里,在给定的分区里,每个消息的偏移量都是唯一的。消费者把每个分区最后读取的消息偏移量保存在Zookeeper(旧版)或Kafka(新版)上旧版的并不具备再均衡和提交offset的可控性。如果悄费者关闭或重启,它的读取状态不会丢失。消费者是消费者群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。消费组保证每个分区只能被一个消费者使用(如果不这么做,需要额外的同步机制。如果需要发布订阅模式,应该为每个消费者建立各自的消费组),一条消息只会被一个消费组消费一次(不考虑宕机)。消费者可以选择提交offset的时间间隔,1 min比较合理,在 1 min内如果消息丢失可以重复读取。

每个集群都有一个broker 同时充当了集群控制器的角色,控制器负责管理工作,包括将分区分配给broker 和监控broker。一个分区可以分配给多个broker,有一个broker作为分区的首领,这种分区复制提供了消息冗余,同时主分区应均为分布在各个broker上。Kafka可以保留消息,指定保留的时间长度,或者消息大小的阈值。

旧版的kafka将broker和主题的元数据、偏移量都保存在ZK上,新版的将偏移量保存在Kafka内部的_consume_offset分区。broker 会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。

下面介绍一些主题的配置,根据经验,把分区的大小限制在25GB 以内可以得到比较理想的效果,数据默认保存一周。如果同时指定了log.retention.bytes 和log.retention.ms,只要任意一个条件得到满足,消息就会被删除。log.segment.bytes和log.segment.ms可以指定日志片段的大小和时间,达到阈值时关闭当前片段,打开新的片段进行写入。只有当日志片段关闭时,才会开始计算过期时间,所以最初到达的消息的存活时间可能会比设置的阈值还要大(过期应该按照批次的维度,否则过于麻烦)。message.max.bytes限制单个消息的大小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值