其他分享
首页 > 其他分享> > Kafka客户端学习总结

Kafka客户端学习总结

作者:互联网

一、客户端API

生产者(Producer)

消费者(Consumer)

二、客户端实践及原理剖析

生产者(Producer)

1、分区机制

分区的作用

Kafka 的消息组织方式实际上是三级结构:主题 - 分区 - 消息,主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份,分区的作用就是提供负载均衡的能力。

分区策略

2、避免消息丢失的配置

消息丢失的场景
最佳实践

3、压缩算法

产生压缩的场景
产生解压缩的场景
最佳实践

Producer 端压缩、Broker 端保持、Consumer 端解压缩。即使用同一种压缩算法,避免进行多余的压缩和解压缩操作。

常见压缩算法性能比较

4、幂等生产者

消息交付可靠性保障
幂等生产者的作用

Kafka 向分区发送数据时,可能会出现同一条消息被发送了多次,导致消息重复的情况。我们可以设置一个参数props.put(“enable.idempotence”, ture),这样生产者就变成一个幂等生产者了,Kafka能够自动做消息的去重操作。

作用范围

5、事务生产者

使用方法
作用范围

消费者(Consumer)

1、消费者组(Consumer Group)

什么是消费者组

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

消费者组特性
最佳实践

2、重平衡(Rebalance)

什么是重平衡

Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 Consumer 如何达成一致,来分配订阅 Topic 的每个分区。

重平衡触发条件
重平衡带来的后果
两类非必要的重平衡
避免重平衡的最佳实践

3、位移(Offset)

自动提交

Kafka Consumer 在后台默默地提交位移,这是 Kafka 默认的提交位移的方式,自动提交主要关注下面两个参数:

手动提交
同步提交

同步提交位移会一直等待,直到位移被成功提交才会返回,如果提交过程中出现异常,该方法会将异常信息抛出。该操作支持自动重试,但是会导致程序阻塞,影响TPS。

异步提交

异步提交位移会立即返回结果,不会阻塞,Kafka 提供了回调函数,可以实现提交之后的逻辑,比如记录日志或处理异常等,但是不支持自动重试。
Kafka Consumer API 为手动提交提供了指定消费分区和位移的方法,可以更精细度的管理位移。

4、位移提交失败异常(CommitFailedException)

CommitFailedException 异常,顾名思义就是 Consumer 客户端在提交位移时出现了错误或异常,而且还是那种不可恢复的严重异常。

参数优化
业务优化

5、位移主题(__consumer_offsets)

管理机制

将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。可以这么说,__consumer_offsets 的主要作用是保存 Kafka 消费者的位移信息。

创建时机
删除过期数据

Kafka 使用 Compact 策略来删除位移主题中的过期消息,避免该主题无限期膨胀。具体做法是 Kafka 提供了专门的后台线程定期地巡检待 Compact 的主题,看看是否存在满足条件的可删除数据。这个后台线程叫 Log Cleaner,很多实际生产环境中都出现过位移主题无限膨胀占用过多磁盘空间的问题,可能是这个线程挂了导致的。

6、多线程消费方案

消费者设计原理

Consumer 设计了单线程 + 轮询的机制,这种设计能够较好地实现非阻塞式的消息获取,获取到消息之后,是否使用多线程消费消息完全由用户自己决定。

多线程方案

首选需要明确一点,KafkaConsumer 类不是线程安全的,所有的网络 I/O 处理都是发生在用户主线程中,因此不能在多个线程中共享同一个 KafkaConsumer 实例,否则程序会抛出 ConcurrentModificationException 异常。

7、消费者组进度监控

监控指标

两者之间的关系:Lag 越大的话,Lead 就越小,反之也是同理。
一般情况下,Lag越小越好,说明消费速度接近于生产速度。

监控的重要性

在实际生产环境中,一定要同时监控 Lag 值和 Lead 值,否则可能会造成比较严重的后果。比如说当消费速度很慢时,慢到它要消费的数据快被 Kafka 删除了,这时就必须立即处理,否则一定会出现消息被删除,从而导致消费者程序重新调整位移值的情形。这可能产生两个后果:

参考:极客时间《Kafka 核心技术与实践》专栏。

标签:总结,分区,Kafka,消息,提交,Consumer,位移,客户端
来源: https://blog.csdn.net/m0_54065725/article/details/122146163