Kafka笔记

最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下。

kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列。它主要由三个部分组成,producer,broker以及consumer。producer发布消息,broker存储消息,consumer接收消息。

发布消息的时候,producer会把它发送到broker的某一个topic上。每条消息都只属于一个topic,而一个topic会有一个或多个partition。那一条消息属于这个topic的哪一个partition会由一个key来决定。这个key既可以由用户定义,也可以由producer在发送的时候自己决定。

broker收到消息后会把它变为二进制形式添加到所属topic的log的最后。注意,Kafka只能在log最末尾添加新的消息,而不能在任意地方插入、删除或者编辑。然后broker会发送一个成功的消息给producer。由于broker的本质其实是一个zookeeper的集群,producer的消息其实会发给所有的broker。producer可以在发送的时候就定义发送成功的标准是收到任意一个broker的成功回复还是所有brokers还是大多数brokers的成功回复。

consumer接收消息的情况有些复杂。首先consumers会被分成不同的组。Kafka可以保证一条消息会被关注这个消息topic的每一个组中的一个且仅有一个consumer收到。这样用户就可以灵活的定义一个topic下的消息要被广播还是负载均衡了。两个极端情况:1,所有consumer都在一个group,那么broker相当于一个负载均衡器,每条消息会被送到不同的consumer;2,所有consumer都在不同group,那么相当于广播,每一条消息会被送给所有的consumer。其它情况都在这两者之间。

Kafka的配置也有些繁琐。为了使用Kafka,首先你得有一个Zookeeper。然后对于Consumer来说,必须给定topic和Zookeeper地址,其它还可以设一些timeout之类的东西。对于Producer来说,需要给定Brokers,Zookeeper地址,其它还可以设一些缓存大小,timeout之类的。如果你想结合Avro来使用Kafka,那么还必须为Consumer和Producer设置Avro Schema Registry的地址。Avro是一套很复杂的定义文件结构的系统,我会在之后的博客中提到。

那Kafka的基本使用就是这样了。有兴趣的可以去Apache官网下下来玩一玩。

posted @   云耳  阅读(2515)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示