kafka学习笔记-kafka基础

参考:极客时间-Kafka核心技术与实战

kafka术语

img

消息(Record):kafka要处理的主要对象。

主题(Topic):承载消息的逻辑容器,实际使用中多用来区分具体的业务。

分区(Partition):一个有序不变的消息序列,每个主题下有多个分区。

消息位移(Offset):分区中每条消息的位置信息,是一个单调递增且不变的值。

副本(Replica):分为领导者副本和追随者副本,每个分区可配置多个副本实现高可用。

生产者(Producer):向主题发布新消息的应用系统。

消费者(Consumer):从主题订阅新消息的应用系统。

消费者位移(Consumer Offset):消费者消费进度。

消费者组(Consumer Group):多个消费者实例共同组成的一个组,同时消费多个分区以提高吞吐量。

重平衡(Rebalance):消费者组某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。

kafka线上集群方案

操作系统:

  1. I/O模型的使用
  2. 数据网络传输的效率
  3. 社区支持度

磁盘:

多使用顺序读写,在软件层面实现了高可用和负载均衡,所以用普通磁盘即可。

磁盘容量:

使用率控制在70%。

新增消息数、平均消息大小、消息留存时间、备份数、是否开启消息压缩。

**带宽:****

使用率控制在70%。

每分钟消息数、平均消息大小。

生产者消息分区机制

作用:

提供负载均衡的能力。

策略:

轮询策略、随机策略、按消息键保序策略、其他策略。

生产者压缩算法

生产者压缩,Broker保持,消费者解压。

何时压缩:

生产者端和Broker端。

何时解压:

消费者端和Broker端。

Broker端压缩:

  1. Broker端指定了和Producer端不同的压缩算法。
  2. Broker端发生了消息格式转换

如何保证消息不丢失

kafka只对“已提交”的消息做有限度的持久化保证。

已提交:若干个Broker接收并写入了这条消息。

  1. 使用producer.send(msg, callback)
  2. 设置acks=all
  3. 设置retries>0
  4. 设置unclean.leader.election.enable=false
  5. replication.factor>=3
  6. min.insync.replicas>1

消息交付可靠性保证

三种承诺方式:最多一次、至少一次、精确一次。

幂等生产者:保证单分区单会话的精确一次交付。

事务生产者:保证所有分区所有会话的精确一次交付。

消费者组

kafka提供的可扩展且具有容错性的消费者机制。

特性:

  1. Consumer Group下可以有一个或多个Consumer实例
  2. Group ID标识唯一个Consumer Group
  3. Consumer Group订阅主题的分区和Consumer是多对一的关系

消费者位移

位移管理机制:

将消费者位移作为一条条普通的kafka消息,提交到__consumer_offsets中。

创建位移主题:

启动第一个Consumer时。

删除过期信息:

使用Compact策略删除位移主题中的过期消息。

消费者组重平衡

重平衡时机:

  1. 组成员数量发生变化
  2. 订阅主题数发生变化
  3. 订阅主题的分区数发生变化

重平衡的弊端:

  1. Consumer停止消费
  2. 重平衡过程慢
  3. 重平衡效率低

避免不必要的重平衡:

  1. Consumer心跳超时
  2. Consumer消费时间过长

CommitFailedException异常处理

出现原因:

消费者组重平衡期间,要提交位移的分区已经分配给了另一个消费者实例。

预防方法:

  1. 减少单条消息的处理时间
  2. 增加单位时间处理的消息数
  3. 减少一次性消费的消息数
  4. 增加消费一批消息的最大时长

你可能感兴趣的:(kafka学习笔记-kafka基础)