盒子
盒子
文章目录
  1. 1. 基本原理
  2. 2. 使用场景
  3. 3. 丢消息常见解决方法
  4. 4. 重复消费原因及解决办法
  5. 5. 常用消息队列及优缺点[瀚途面试题]

Kafka基本原理及常见问题

1. 基本原理

2. 使用场景

  • 异步处理: 将一些实时性要求不是很强的业务进行异步处理
  • 解耦: 消息队列将消息生产与订阅分离,可以实现应用解耦
  • 削峰: 常用于秒杀,在应用前端以消息队列接收请求来达到削峰的目的。请求超过队列长度直接不处理重定向错误页面
  • 提速: 消息队列应用下,消息生产应用只管生产,不需要等待消费就可以处理其他事情,实际上起到了提速的作用

3. 丢消息常见解决方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
acks = all # 所有副本接收成功消息才算发送成功
retries = 300 # 重试时间间隔(可适当调整,防止磁盘卡顿,网络中断超过)

# producer异步发送消息,当broker返回异常信息时并不会抛出异常
# 此时考虑单条数据大小的问题 kafka.common.MessageSizeTooLargeException

## Consumer side: this will determine the largest size of a message that can be fetched by the consumer
fetch.message.max.bytes

## Broker side: this will allow for the replicas in the brokers to send messages within the cluster and make sure the messages are replicated correctly. If this is too small, then the message will never be replicated, and therefore, the consumer will never see the message because the message will never be committed (fully replicated)
replica.fetch.max.bytes

## Broker side: this is the largest size of the message that can be received by the broker from a producer
message.max.bytes

## Broker side(per topic): this is the largest size of the message the broker will allow to be appended to the topic. This size is validated pre-compression. (Defaults to broker'smessage.max.bytes.)
max.message.bytes

4. 重复消费原因及解决办法

使用kafka时,消费者每次poll的数据业务处理时间超过kafka的max.poll.interval.ms,默认300秒,导致kafka的broker认为consumer挂掉,触发kafka进行rebalance,导致重新消费
增加rebalance listener即可,发生rebalance前提交offset

5. 常用消息队列及优缺点[瀚途面试题]

当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等,而部分数据库如Redis、Mysql也可以实现消息队列的功能

支持一下
扫一扫,支持沈健
  • 微信扫一扫
  • 支付宝扫一扫