消息队列kafka

1.kafka是什么,主要应用场景

        kafka是一个分布流式处理平台。

        分布流式平台的三个关键功能:

        1.消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列的原因

        2.容错的持久方式存储记录消息流:kafka会把消息持久化到磁盘,有效避免了消息丢失的风险

        3.流式处理平台:在消息发布的时候进行处理,kafka提供了一个完整的流式处理类库

        主要应用场景:

        1.消息队列:建立实时流数据管道,可靠的在系统或应用程序之间获取数据

        2、数据处理:构建实时的流数据处理程序来转换或处理数据流

2.和其他消息队列相比优势在哪里

        1.极致的性能:基于Scala和Java语言开发,设计中大量使用了批量处理和异步思想

        2.生态系统兼容性无可匹敌:kafka与周边生态系统的兼容性是最好的,尤其是在大数据和流计算领域

3.kafka消息模型

        kafka的消息队列模型是发布-订阅模型,使用主题为消息通信载体,发布者发布一条消息到主题上,然后通过主题将消息推送给订阅了该主题的消费者,在该消息发布后订阅主题的则不能收到该消息

4.kafka的核心概念

        1.生产者:产生消息的一方

        2.消费者:消费消息的一方

        3.代理:可以看作是kafka的一个独立实例,多个kafka代理组成消费者

        4.主题:生产者将消息发送到特定的主题,消费者通过订阅相关主题来获取消息

        5.分区:分区属于主题的一部分,一个主题可以有多个分区,并且同一主题下的分区可以分布在不同的代理上,表明一个主题可以横跨多个分区

5.kafka中的多副本机制

        kafka为分区引入多副本机制,分区中多个副本中有一个leader的副本,其他副本为follower,生产者发送的消息会先发送到leader副本,然后在同步给follower副本。

6.多分区和多副本的好处

        1.给特定主题指定多个分区,而各个分区可以分布到不同的代理上,可以提供良好的并发能力

        2.分区可以指定对应的副本数,极大的提高了消息存储的安全性,提高了容灾能力,但是相应的增加了所需的存储空间

7.zookeeper和kafka

        1.代理注册:在zookeeper上会有一个专门用来进行代理服务器列表记录的节点,每个代理在启动时,都回到zookeeper上进行注册,即在/brokers/ids下创建属于自己的节点,每个代理就会将自己的IP地址和端口等信息存入该节点

        2.主题注册:在kafka中,同一个主题的消息会被分成多个分区并将其分布到多个代理上,这些分区信息及代理对应的关系也有zookeeper维护

        3.负载均衡

8.保证kafka的消费顺序

        发送消息的时候指定key/分区

9.kafka如何保证消息不丢失

        消息丢失三种情况:生产者丢失消息,消费者丢失消息,kafka丢失消息

9.1 生产者丢失消息

        生产者发送消息后,消息因为网络问题并没有发送过去,因此需要在发送消息后判断是否发送成功,如果发送失败就进行重试

9.2 消费者丢失消息

        消费者刚拿到消息准备消费,就突然挂掉,倒是消息并没有消费,但是拿到消息时就返回了消费标志,所有解决方法设计,手动关闭自动提交消费标志,改成真正消费完再手动提交

9.3 kafka丢失消息

        我们发送的消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步。多个 follower 副本之间的消息同步情况不一样,当我们配置了 unclean.leader.election.enable = false 的话,当 leader 副本发生故障时就不会从 follower 副本中和 leader 同步程度达不到要求的副本中选择出 leader ,这样降低了消息丢失的可能性。

10.kafka如何保证消息不重复消费

        出现的原因:

        1.服务端已经消费的数据没有成功提交消费标志(根本原因)

        2.kafka由于服务端处理业务时间长或网络链接等原因让kafka任务服务假死,

        解决方法:

        1.消费消息服务做幂等校验,

        2.关闭自动提交消费标志,改为手动

11.kafka的重试机制

11.1 消费失败的情况

        在默认配置下,消费失败会进行重试,重试多次不成功就会跳过当前消息,进行后续消息的消费,不会卡住当前消息

11.2 默认重试次数

        默认配置下,最多进行10次重试,每次重试时间间隔为0,即立即进行重试,10次重试还未成功则认为消费失败跳过该消息

11.3 消费失败的消息如何处理

        该消息会进入死信队列,,在死信队列中,可以进一步分析,处理这些无法正常消费的消息,以便定位问题,修复错误,并采取适当的措施

        

消息队列kafka和rabbitmq是两种常见的消息中间件。它们在功能和特点上有一些区别。 Kafka是一个高性能的分布式消息队列系统,它使用了发布-订阅模式。Kafka的优点包括支持消息的持久化、负载均衡和集群,集群易于扩展,可以透明地增加新的服务器进集群。Kafka还具有高性能和灵活的消息分发机制。它的缺点是需要依赖Zookeeper,并且Topic一般需要人工创建,部署和维护成本较高。\[1\] RabbitMQ是一个功能丰富的消息队列系统,它使用了AMQP协议。RabbitMQ支持多种协议,如AMQP、XMPP、SMTP和STOMP。它具有消息的持久化、负载均衡和集群的能力。RabbitMQ还支持消息确认机制和容错性。它的缺点是相对于Kafka和ZeroMQ,在大吞吐量性能方面稍逊一筹,因为它牺牲了部分性能来换取稳定性,比如消息的持久化功能。\[2\] 总的来说,Kafka适合处理大规模数据流,具有高性能和可扩展性,但需要依赖Zookeeper和人工创建Topic。而RabbitMQ适合企业级开发复杂性,具有丰富的功能和协议支持,但在大吞吐量性能方面稍逊一些。选择使用哪种消息队列取决于具体的需求和场景。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [技术选型-消息队列kafka和rabbitmq的比较](https://blog.csdn.net/duanmj112/article/details/119335397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值