Kafka 组件概念(基础)
Kafka 组件概念(基础)
kafka不同于RabbitMQ和RocketMQ,它没有queue的概念,取而代之的是分区:Partition。Kafka没有固定说一台服务器必须唯一对应一个主题
-
Broker 节点,现实生产环境中一个节点就是一台服务器;一个节点可以包括多个主题,和一个主题下的多个分区
- Topic 主题,一个主题管理多个分区
- Partition 分区,一个分区有多个follower,但仅有一个leader
- Leader 主分区,处理数据的主力
- follower 从分区,从分区的内容来自于拷贝主分区的数据
- Partition 分区,一个分区有多个follower,但仅有一个leader
- Topic 主题,一个主题管理多个分区
-
consumer 消费者,Kafka支持一个消费者消费不同Topic内的消息(通过订阅(subscribe)多个Topic来接收这些Topic中发布的消息)。
虽然Kafka提供了消费者消费不同topic内的消息,但在生产环境中,建议一组消费者消费一个topic内的消息。这样有助于维护梳理业务
-
consumer group 消费者组,一个Topic中的同一条消息不可能被同一个Consumer Group内的不同Consumer各自消费一次
-
producer 生产者,向Kafka集群发送消息,一个生产者可以向不同的主题发送消息
Kafka使用的是生产批量发送,批量拉取消费的模式,既生产者生产了一条数据后不会立刻发送给topic下的leader,而是累积到一定数据大小后发送,消费者也是如此,每一次都从leader区中拿一批数据而不是一条一条拿,为了达到削峰的目的,Kafka支持consumer使用pull(拉取)的方式处理数据,举个例子,某一时刻producer生产100条/s,consumer消费速度恒定50条/s,如果以推送的方式,生产速度严重高于消费速度,消费者没处理完当前的消息,下一波又累积上来了,长此以往即会压垮消费者。
生产者如何确认消息发送成功?
生产者把数据发送给Kafka,Kafka处理成功后,Kafka会发送ACK消息给生产者,Kafka提供3种确认模式
- acks=0,生产者不用等待Kafka数据落盘的ACK响应(安全性和延迟最低,吞吐量最高)
- acks=1,Kafka数据落盘到leader,但follower还未完全同步leader中的数据,返回ACK消息(安全性和延迟中等,吞吐量中等,一般选这个配置)
- acks=all/-1,Kafka数据落盘到leader,且follower已同步leader中的数据,返回ACK消息(安全性和延迟最高,吞吐量最低)
ACK消息:Kafka收到消息后返给生产者的确认消息,而若Kafka处理消息失败则并不会返回ACK消息给生产者,而是返回一个异常或者错误码。而对于消息发送失败,生产者可以尝试重试再次发送数据。
而在Kafka中,消息的消费模型主要采用的是拉取模式(pull),当消费者从Kafka集群中拉取到消息并成功处理后,它会更新自己在Kafka中的消费偏移量,以标记哪些消息已经被成功消费。这个偏移量的更新过程,就是一种形式的ACK机制。
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18329929

浙公网安备 33010602011771号