ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[https://juejin.cn/post/6898925796971249678](https://juejin.cn/post/6898925796971249678) **一、Kafka优点** * 延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。 * 可扩展性:kafka集群支持热扩展 * 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 * 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) * 高并发:支持数千个客户端同时读写 **二、名词解释** * **Broker**:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。 * **Topic**:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。 * **massage**: Kafka中最基本的传递对象。 * **Partition**:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。 * **Segment**:partition物理上由多个segment组成,每个Segment存着message信息。 * **Producer :** 生产者,生产message发送到topic。 * **Consumer :** 消费者,订阅topic并消费message, consumer作为一个线程来消费。 * **Consumer Group**:消费者组,一个Consumer Group包含多个consumer。 * **Offset**:偏移量,理解为消息partition中的索引即可 **三、存储策略** ***** * kafka以topic来进行消息管理,每个topic包含多个partition,每个partition对应一个逻辑log,有多个segment组成。 * 每个segment中存储多条消息(见下图),消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。 * 每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。 * 发布者发到某个topic的消息会被均匀的分布到多个partition上(或根据用户指定的路由规则进行分布),broker收到发布消息往对应partition的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。 ![](https://img.kancloud.cn/7b/86/7b86f219d43c5a7a9d852a089c00dfda_1010x688.png) ![](https://img.kancloud.cn/1d/32/1d32db417c867b0d57c8acd8f9699ab7_1019x483.png) ![](https://img.kancloud.cn/f6/7a/f67ae2b0863d67e859a16254caedd230_890x442.png)