2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

如何在 kafka-python 和 confluent-kafka 之间做出选择?

  • 2017-09-10
  • 本文字数:2226 字

    阅读完需:约 7 分钟

在 Data Syndrome,我们使用并喜爱 Kafka。它使我们能够以最少的努力和复杂性将批处理变为实时处理。然而,在最近的一个项目中,我们学到了有关 kafka-python 软件包的惨痛教训,该软件包促使我思考该如何选择开源工具。本文将反思我们的开源决策过程,介绍两个用于 Python 的 Kafka 客户端、我们遇到的问题及我们将采用的解决方案。

kafka-python:蛮荒的西部

kafka-python 是最受欢迎的 Kafka Python 客户端。我们过去使用时从未出现过任何问题,在我的《敏捷数据科学 2.0》一书中我也用过它。然而在最近这个项目中,它却出现了一个严重的问题。我们发现,当以文档化的方式使用KafkaConsumer、Consumer 迭代式地从消息队列中获取消息时,最终到达主题topic 的由Consumer 携带的消息通常会丢失。我们通过控制台Consumer 的分析验证了这一点。

需要更详细说明的是,kafka-python 和KafkaConsumer 是与一个由SSL 保护的Kafka 服务(如 Aiven Kafka )一同使用的,如下面这样:

复制代码
kafka_consumer = KafkaConsumer(
topic,
enable_auto_commit=True,
group_id=group_id,
bootstrap_servers=config.kafka.host,
api_version=(0, 10),
security_protocol='SSL',
ssl_check_hostname=True,
ssl_cafile=config.kafka.ca_pem,
ssl_certfile=config.kafka.service_cert,
ssl_keyfile=config.kafka.service_key
)
for message in kafka_consumer:
application_message = json.loads(message.value.decode())
...

当以这样的推荐方式使用时,KafkaConsumer 会丢失消息。但有一个变通方案,就是保留所有消息。这个方案是 Kafka 服务提供商 Aiven support 提供给我们的。它看起来像这样:

复制代码
while True:
raw_messages = consumer.poll(timeout_ms=1000, max_records=5000)
for topic_partition, messages in raw_messages.items():
application_message = json.loads(message.value.decode())
...

虽然这个变通方案可能有用,但 README 中的方法会丢弃消息使我对其失去兴趣。所以我找到了一个替代方案。

confluent-kafka:企业支持

发现 coufluent-kafka Python 模块时,我感到无比惊喜。它既能做 librdkafka 的外封装,又非常小巧。librdkafka 是一个用 C 语言写的 kafka 库,它是 Go 和.NET 的基础。更重要的是,它由 Confluent 公司支持。我爱开源,但是当“由非正式社区拥有或支持”这种方式效果不行的时候,或许该考虑给替代方案印上公章、即该由某个公司拥有或支持了。不过,我们并未购买商业支持。我们知道有人会维护这个库的软件质量,而且可以选择买或不买商业支持,这一点真是太棒了。

用 confluent-kafka 替换 kafka-python 非常简单。confluent-kafka 使用 poll 方法,它类似于上面提到的访问 kafka-python 的变通方案。

复制代码
kafka_consumer = Consumer(
{
"api.version.request": True,
"enable.auto.commit": True,
"group.id": group_id,
"bootstrap.servers": config.kafka.host,
"security.protocol": "ssl",
"ssl.ca.location": config.kafka.ca_pem,
"ssl.certificate.location": config.kafka.service_cert,
"ssl.key.location": config.kafka.service_key,
"default.topic.config": {"auto.offset.reset": "smallest"}
}
)
consumer.subscribe([topic])
# Now loop on the consumer to read messages
running = True
while running:
message = kafka_consumer.poll()
application_message = json.load(message.value.decode())
kafka_consumer.close()

现在我们能收到所有消息了。我并不是说 kafka-python 工具不好,我相信社区会对它的问题做出反应并解决。但从现在开始,我会一直坚持使用 confluent-kafka。

开源治理

开源是强大的,但是涉及到复杂的“大数据”和 NoSQL 工具时,通常需要有一家大公司在背后推动工具的开发。这样你就知道,如果那个公司可以使用工具,那么该工具应该拥有很好的基本功能。它的出现可能是非正式的,就像某公司发布类似 FOSS 的项目一样,但也可能是正式的,就像某公司为工具提供商业支持一样。当然,从另一个角度来看,如果一家与开源社区作对的公司负责开发某个工具,你便失去了控制权。你的意见可能无关紧要,除非你是付费客户。

理想情况是采取开源治理,就像 Apache 基金会一样,还有就是增加可用的商业支持选项。这对互联网上大部分的免费软件来说根本不可能。限制自己只使用那些公司盖章批准后的工具将非常限制你的自由。这对于一些商店可能是正确选择,但对于我们不是。我喜欢工具测试,如果工具很小,而且只专心做一件事,我就会使用它。

信任开源

对于更大型的工具,以上决策评估过程更为复杂。通常,我会看一下提交问题和贡献者的数量,以及最后一次 commit 的日期。我可能会问朋友某个工具的情况,有时也会在推特上问。当你进行嗅探检查后从 Github 选择了一个项目,即说明你信任社区可以产出好的工具。对于大多数工具来说,这是没问题的。

但信任社区可能存在问题。对于某个特定的工具,可能并没有充分的理由让你信任社区可以产出好的软件。社区在目标、经验和开源项目的投入时间方面各不相同。选择工具时保持审慎态度十分重要,不要让理想蒙蔽了判断。

英文原文链接 https://blog.datasyndrome.com/a-tale-of-two-kafka-clients-c613efab49df


感谢蔡芳芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-10 19:0024522

评论

发布
暂无评论
发现更多内容

后起之秀 虽迟未晚!这款轻量云服务器乱拳打死老师傅

YG科技

ES6新特性(二)

阡陌r

JavaScript Rest ES6 箭头函数 symbol

Databend hash join spill 设计与实现 | Data Infra 第 16 期

Databend

网络安全(黑客)自学方向

网络安全学海

程序员 黑客 网络安全 信息安全 渗透测试

中小企业数字化既要效率又要效益,这款轻量云服务器打破悖论

YG科技

被誉为轻量云服务器“鼻祖”的腾讯云,遇到最硬核对手

平平无奇爱好科技

腾讯云轻量应用服务器到期?赶紧换新上市的华为云耀云服务器L实例吧!

轶天下事

阿里云轻量云服务器市场“帝位”稳固?这位“挑战者”来势汹汹

YG科技

使用指南|如何将 GreptimeDB 数据保存在阿里云 OSS

Greptime 格睿科技

数据库 阿里云 云原生 Greptime GreptimeDB

跬智信息(Kyligence)入选 IDC《中国数据智能市场生态图谱V4.0》

Kyligence

数据分析 指标平台

不想续费百度云,这款轻量应用服务器完美替代

轶天下事

传统ERP云服务器高不可攀,华为云耀云服务器L实例可以“交个朋友”

轶天下事

All IN数字化?华为云耀云服务器L实例让中小企业没有后顾之忧

YG科技

数字化转型与架构-架构设计篇|系统组件有哪些?

数字随行

数字化转型

跨境电商项目还在冷启动?请收好这份“破冰”秘籍

YG科技

主打一个遥遥领先,这款轻量应用服务器真是太“硬”了

平平无奇爱好科技

想做跨境电商不知道如何搭建网站?看这篇教程就够了

平平无奇爱好科技

我与极客时间的不解之缘

打工人!

我和极客时间的故事

通过观测云快速了解真实用户体验

Yestodorrow

可观测性 用户增长 业务增长 真实用户体验

快收藏!中小电商企业必用的ERP软件ODooo“奶妈级”教程来了

平平无奇爱好科技

中小企业开发小程序易做大“怨种”?试试这款轻量应用服务器

YG科技

轻量云服务器成中小企业网站香饽饽,腾讯云、华为云、阿里云如何选购到合适?

YG科技

独立站成跨境电商终极答案,解锁中小企业吃透红利方式

YG科技

拒绝“反向打工”,这款轻量云服务器才是经济周期下中小企业良心之选!

YG科技

力压阿里云轻量服务器,华为云耀云服务器L实例如何成为中小企业的“新欢”

轶天下事

华为云耀云服务器L实例_ 为跨境电商提升“钞”能力

轶天下事

使用 LF Edge eKuiper 将物联网流处理数据写入 Databend

Databend

文心4.0,启动大模型时代的飞轮效应

脑极体

AI

中小企业数字化人才困境重重,华为云耀云服务器L实例妙手回春

平平无奇爱好科技

如何在kafka-python和confluent-kafka之间做出选择?_语言 & 开发_Russell Jurney_InfoQ精选文章