kafka介绍

基础架构

producer 生产者,消息产生

broker 实例对应服务器的节点,每个cluster集群内的broker都有不重复的编号

topic 消息主题,分类

partition topic的分区,用作负载,提高吞吐量,对应的是一个个文件

replication 分区副本,作用是备份,主leader故障,follower进行选主,副本数不大于broker数,主备不在同一个机器,同一机器对同一分区也只放一个副本

message 消息的主体

consumer 消费者

consumer group 消费者组 同一个分区只能被某一组消费者消费

主题 分区 集群

增加分区partition,提高消费效率

多实例broker,在但节点故障时增加容错率

retention 消息的保留机制

  • log.retention.hours
  • log.retention.minutes
  • log.retention.ms 优先级最高
1
2
grep -i 'log.retention.[hms].*\=' config/server.properties
log.retention.hours=72

效率

磁盘顺序读写

零拷贝而言,并非是真的没有数据拷贝的过程,只不过是减少了用户态内核态的切换次数,以及CPU的拷贝次数

1
2
3
#可以将文件内容直接发送到网络输出流中
int sendfile(int out_fd, int in_fd, off_t* offset, size_t count);
// num = sendfile(xxx);

mmap()是一个用于创建内存映射的系统调用函数

1
2
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
// buf = mmap(xxx)
  • 成功时返回映射区域的起始地址;

  • 失败时返回MAP_FAILED(通常是(void *)-1)

重复消费

消息重复消费和消息丢包的解决办法

保证不丢失消息:生产者(ack=all 代表至少成功发送一次) 重试机制

消费者 (offset手动提交,业务逻辑成功处理后,提交offset)

保证不重复消费:落表(主键或者唯一索引的方式,避免重复数据)

业务逻辑处理(选择唯一主键存储到Redis或者mongdb中,先查询是否存在,若存在则不处理;若不存在,先插入Redis或Mongdb,再进行业务逻辑处理)

保证数据不会丢失的问题

  • 1.producter端通过ack机制保证数据不丢失
  • 2.broker端通过topic副本数保证数据不丢失,同时要求生产端ack为-1
  • 3.consumer端通过提交偏移量offset来保证数据不丢失,但是可能会导致重复消费

重复消费已经消费过的数据,可以使用以下两种方法:

  1. 更改消费者组:如果你使用的是相同的消费者组,那么 Kafka 将会将已经被消费的消息排除在消费者组之外,从而避免重复消费。因此,你可以更改消费者组的名称,从而允许消费者重新消费之前已经消费过的消息。
  2. 设置消费者的偏移量:Kafka 中每个分区的消息都有一个偏移量,表示消息在分区中的位置。消费者可以通过设置偏移量来重新消费之前已经消费过的消息。你可以通过重置消费者的偏移量,将其设置为之前已经消费过的消息的偏移量,从而允许消费者重新消费这些消息。
点击打赏
文章目录
  1. 1. 基础架构
  2. 2. 主题 分区 集群
  3. 3. 效率
  4. 4. 重复消费
  5. 5. 保证数据不会丢失的问题
  6. 6. 重复消费已经消费过的数据,可以使用以下两种方法:
载入天数...载入时分秒... ,