Kafka-奇怪的基础知识(1)

本文详细介绍了Kafka的使用场景,包括消息系统、存储系统和流式处理平台。讨论了Kafka的顺序性,强调了单Partition如何保证顺序以及解决网络超时导致的问题。此外,还探讨了Kafka的重复消费问题,分析了Rebalance过程,提出了解决方案。最后,文章介绍了Kafka的事务机制和API,并分享了一些不常见的知识,如自定义分区策略和topic分区数量的限制。
摘要由CSDN通过智能技术生成

一、Kafka的使用场景

a、消息系统

kafka最主要的使用场景,必然是消息系统(分布式消息订阅系统)。
kafka的特性:
  • 削峰
  • 冗余存储
  • 系统解耦
  • 缓冲
  • 异步通信
  • 扩展性和可恢复性

b、存储系统

kafka的本地持久化策略

c、流式处理平台

二、Kafka的顺序性

顺序性是在消费时的顺序。
如果需要保证全局的消息顺序性,这样显然是违背了kafka的设计初衷的,可能你需要换一个方案。
下面会说明为什么会这样。

a、单Partition如何保证顺序

当生产者发送的消息是顺序时,众所周知,如果配置了多个分区,消息是会分到不同的分区的,这样就没办法保证顺序了。因此,
生产者在生产消息时,可以指定key

ProducerRecord<Integer, String> record = new ProducerRecord<>(topic, key, msg);

相同key的消息会发到topic的同一分区中,这样,在消费时,从这一分区获取的数据就是顺序的。
存放分区数据的默认的default策略是对分片数取余。
**这样会带来一个问题,分区数增加了怎么办?**后面的文章会再分析这个问题

b、单Partition场景细化

问题:
  1. broker在发送ack到producer时,网络超时了,producer重试,这样消息不是重复了吗?
  2. producer连续发送两条消息,m1和m2,m1由于某些原因,发送失败,m2发送成功,m1重试后成功,这样发到partition中不是乱序了吗?
解决:
  • kafka引入了pid和sequenceNumber,producer发送到broker时,会带有一个sequenceNumber,同时broker本身也维护一个sequenceNumber,commit一次
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值