队列指针位置
一个队列只支持一个消费者。
一个队列支持多个消费者,且消费都各自独立消费互不相关。
性能差,保证数据的准确性
Producer 内部内存队列缓冲消息,Broker 定时或定量批量发送。
性能高,有一定延迟, 重启服务可能丢失消息
不同消费者组可以消费同一个 Topic, 各自维护消费指针,相互之间没有影响。
同一 Consumer 组下的消费者可以同时消费多个 Partition,但两个 Consumer 不能同时消费一个 Partition。
数据分片保存
Data Node - DataBase
Partition - Table
一个物理数据库 10 个 mysql 实例,每个实例 99 个表。
| field | desc |
|---|---|
| id | 自增主键 |
| biz_id | 业务查询主键 |
| body | 消息体 |
| --- | --- |
Broker 端推,消费者端简单。Broker 需要维护状态。
Broker 可能会被堵塞,消息丢失
最佳实践
轮询
消费者组中消费者变化,动态分配 Partition。
少部分消息可能会被消费多次,消费者端需要做幂等处理。
头指针和尾指针间的距离
分区热迁移
Zookeeper
Nginx + DNS