Spring Cloud微服务实战 打造企业级优惠券系统 2-13 kafka Producer-Consumer核心特性

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。其底层同样是生产者和消费者

原文地址:https://www.cnblogs.com/1446358788-qq/p/14227722.html