0 课程地址
https://coding.imooc.com/lesson/380.html#mid=28229
1 生产者(Producer)特性
1.1 生产者如何和topic中的分区(partition)关联
默认情况下生产者不关心消息写入哪个分区(partition),但是如果出现特殊情况(如某个分区损坏,后台会报特定错误)也可指定写入哪个分区(非损坏的分区)。
1.2 生产者和分区(partition)关联的方式
通过topic+key(可以为null)+value(消息)的方式。
不存在key,即key为null,使用默认的分区分配器,round-robin实现负载均衡;存在key,使用默认的分区分配器,对key进行hash 确定消息应该分配到哪个分区
2 消费者(Consumer)特性
2.1 为何kafka不会丢失消息
消费者组读取消息时,通常订阅一个或多个topic,读取消息时,记录当前已经读取的offset,offset是持续增长的整数值。partition的每个消息都有偏移量(offset记录)。
消费者可以根据偏移量在服务停止或者重启时不丢失消息。
2.2 消费者和topic内的partition关联方式
消费者组协作消费同一个topic方法,kafka能保证每个topic内的partition被消费者组内的一个消费者消费。
a 1个消费者组包含一个消费者,消费一个topic中的4个分区, 该消费者消费全部分区
b 1个消费者组包含两个消费者,消费一个topic中的4个分区, 两个消费者平均随机消费两个不同的分区
c 1个消费者组包含4个消费者,消费一个topic中的4个分区,4个消费者平均随机消费一个不同的分区
d 1个消费这组包含5个消费者,消费一个topic中的4个分区,4个消费者平均随机消费一个不同的分区,第5个消费者处于空闲状态(注意消费者组的消费者个数应小于等于partition个数,避免资源浪费)
e 2个消费者组消费一个topic中的4个分区,每个消费者组是独立消费,并不和其他消费者组关联
3 其余知识点
3.1 kafka常见客户端
生产者
消费者
高级的客户端如 流式处理的stream,connectAPI。其底层同样是生产者和消费者