关于 Kafka 应用开发知识点的整理(三)

一些关于kafka客户端库实践经验汇总

Posted by pandaychen on February 8, 2022

0x00 前言

本篇文章,总结下在项目中使用 sarama-kafka 库的一些经验。是对前文关于 Kafka 应用开发知识点的整理(二)的补充。部分参考阿里云的kafka最佳实践

0x01 阿里云的最佳实践

Producer最佳实践

Producer最佳实践,降低发送消息的错误率。文中以JAVA为例(其他语言可参考):

1、发送消息

发送消息的示例代码如下,时间戳这个可以加,用于在消费端感知消息的时效性(比如重复消费的时候,按照时间过滤掉过期的消息等策略):

Future<RecordMetadata> metadataFuture = producer.send(new ProducerRecord<String, String>(
        topic,   //消息主题
        null,   //分区编号,建议为null,由Producer分配
        System.currentTimeMillis(),   //时间戳
        String.valueOf(value.hashCode()),   //消息键
        value   //消息值
));

Consumer最佳实践

0x02 客户端的选型

前文关于 Kafka 应用开发知识点的整理(二)介绍了Shopify/sarama的配置及使用情况,在现网中,主要的客户端有下面几个:

Shopify/sarama

  • 优点:完全基于golang实现
  • 缺点:问题多

为什么不推荐使用Sarama Go客户端收发消息?

confluent-kafka-go

此库基于kafka C/C++库librdkafka构建,是阿里云官网推荐的kafka客户端,参考下面文档:

此外,sarama提供了mock包

segmentio/kafka-go

segmentio/kafka-go也是一个极佳的备选客户端(许多公司生产环境使用),官方对比其他常见客户端的优缺点,也是此库的实现动机。此库完全基于golang实现

  • 优点:提供低级API和高级API(如readerwriter),以writer为例,相对低级api,它是并发safe的,还提供连接保持和重试,无需开发者自己实现,另外writer还支持sync和async写、带context.Context的超时写等
  • 缺点:Writersync模式写入比较慢,不推荐使用,推荐使用async模式;此外,segmentio/kafka-go没有提供mock测试包,官方推荐:需要自己建立环境测试,在本地启动一个kafka服务,然后运行测试

0x0 参考

转载请注明出处,本文采用 CC4.0 协议授权