生产过程
保证分区有序,不能保证Topic有序
offset就想当与该条消息在该队列中的唯一ID,而每个消费者会记录自己消费到的offset!
一个问题:同一个消息怎么能让N个消费者消费?
- 每个消息记录自己被消费的次数,当被消费N次后就删除该消息,开始消费下一个消息。
- 每个消费者会定时拿着自己的offset去消费,如果当前消息ID为自己的offset,那么就返回空消息。
实现负载均衡:默认分区器DefaultPartitioner
-
指明partition的情况下,发送至指定partition
-
没有指明partition值但有key的情况下:hash值取模获得partition
-
既没有partition值有没有key值的情况下,Kafka采用Sticky Partition(粘性分区器),会随机选择一个分区,待该分区的batch已满或者已完成,Kafka再随机一个分区进行使用(和上一次的分区不同)
Kafka是怎样存消息的呢?【文件🐶】
消息丢失问题
ACK消息确认机制
数据一致性问题
消费方式
消费者主动拉去【没有数据时则阻塞一段时间再去拉取】
kafka效率高原因
-
顺序写入磁盘
-
零拷贝技术
普通文件的IO过程:
-
零拷贝
直接内核空间进行对文件进行IO,不需要拷贝到用户空间。