![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kafka
文章平均质量分 75
从入门到源码分析,高级面试题解析
码拉松
这个作者很懒,什么都没留下…
展开
-
一文带你认识Kafka重点知识以及最佳应用实践方式
在Kafka中每个topic一般都会有多个分区,每个分区会按照一定规则分配给对应的消费者,那么一旦消费者无法接收消息后,就必须对分区进行重新分配,保证消息能够正常的被消费。比如原来一个主题中有两个分区,分别对应一个消费者组中的两个消费者,此时如果有一个消费者挂了,那么就会触发分区再均衡,此时就会让另一个健康的消费者来消费原来那个消费者对应的分区中的数据。简单的理解一下,副本就是对于分区中消息的备份,是kafka中通过数据的冗余保证高可用的一种方式,所以副本又是建立在kafka集群模式的基础上的。原创 2023-06-12 09:45:00 · 440 阅读 · 0 评论 -
如何确保Kafka消息不丢失
我们知道Kafka对于消息的可靠性可以做到至少一次(at least once)的保证,即消息不会丢失,但有可能重复发送,本文就来分析一下Kafka究竟是如何做到的。可以看出,要想确保Kafka消息不丢失,Consumer、Producer以及Broker都需要做好各自所负责的部分,Producer需要确保消息成功发送到Broker端,Broker端则要确保消息的成功落盘、多副本、持久化,Consumer端则要自己对自己负责,对于已提交的offset的消息都是自己真正消费过的。原创 2022-12-28 14:00:00 · 2794 阅读 · 2 评论 -
Kafka触发Rebalance的场景分析
所谓Rebalance就是让Consumer对如何消费订阅主题下的分区进行重新规划,由于整个过程所有Consumer都不能消费,因此Rebalance的发生次数以及一次Rebalance的持续时间都对Consumer有着很大的影响。Kafka中Rebalance主要分为两步,第一步是JoinGroup,第二步是SyncGroup,通过Coordinator来协调各消费组的元数据信息以及组成员之间的关系,包括选举group leader、处理JoinGroup、SyncGroup请求等等。原创 2022-12-27 10:00:00 · 1047 阅读 · 0 评论 -
Kafka重要生产参数配置建议
使用,可以保证消息的顺序性,假设有两条消息A、B,A先发送但失败了在执行重试时,B发送且成功了,之后A也重试成功了,此时A、B消息顺序就反了,如果将此参数设置为1,则可以保证A在重试时,B消息无法进行发送,必须等A收到broker响应后B才能发送,设置较高可以提升吞吐量,但会占用更多的内存,此参数值。这有助于提高客户端和服务器的性能。设置请求消息的最大大小,避免发送大量的请求,限制了单条消息的size与批次消息的size,如果改变此值,需要注意服务器也需要进行相应设置,因为服务器也有接收消息的大小限制。原创 2022-12-21 17:00:00 · 4945 阅读 · 0 评论 -
Kafka知识图谱大总结
Kafka知识强化图谱针对现在阶段对于Kafka有一定认知的基础上,通过基础概念、常见参数、问题思考、唯快不破四个方面进一步加强理解,基本涵盖了Kafka所有的常见知识点!原创 2021-08-13 16:17:25 · 269 阅读 · 0 评论 -
记一次kafka消费延迟造成的生产问题
背景介绍今天有同事找我,说他那边遇到kafka消费延迟问题,某条消息从生产者发送后,再到消费者收到,经过了几分钟的时间,之后又恢复正常,时不时会遇到一次这样的问题。简单分析当我一听到消费延迟的问题,很自然的就想到了肯定消息阻塞造成的,所以我首先我们查看了消息队列的消费情况,发现当前并没有消息积压在kafka服务端,之后我们也确认了kafka集群很正常,没有出现任何异常现象。进一步分析虽然表面上看消息并没有积压,但凭借经验,我感觉还是这方面的问题,既然kafka服务端自身没有积压,那一定就是消费端自原创 2021-07-30 22:53:57 · 1821 阅读 · 2 评论 -
如何保证kafka消费端接收到消息的有序性
kafka自身可以保证一个分区中的消息是有序的原创 2020-09-29 15:53:48 · 1700 阅读 · 0 评论 -
Spring整合Kafka消费端concurrency参数设置
Spring整合Kafka时在消费端为我们提供了一个参数concurrency,这个参数可主要是用来设置消费者的线程数,提高消费的能力,当然与所有线程数设置的套路一样,这个值并不是越大越好。Spring中提供的这个参数其原理就和启动多个消费者一样,kafka在启动时会根据你的消费者数量与主题中的分区数进行匹配,比如你有3个消费者订阅了‘test_topic’主题,这个主题又有3个分区,那么kafka就会为每一个消费者分配一个分区,服务端再发送消息时,可以把消费均匀的发送到3个分区中,这样就可以实现3个消费原创 2020-09-28 18:57:08 · 9410 阅读 · 4 评论 -
Kafka分区再均衡流程分析
什么是分区再均衡?在Kafka中每个topic一般都会有多个分区,每个分区会按照一定规则(轮询等,也可以自定义)分配给对应的消费者,那么一旦消费者无法接收消息后,就必须对分区进行重新分配,保证消息能够正常的被消费。触发分区再均衡的条件消费者变化:加入或退出,消费者未在指定的时间内发生心跳包。分区数变化:增加分区的数量(分区数量一般只能新增不能减少)。主题数变化:订阅的主题数发生变化。比如原来一个主题中有两个分区,分别对应一个消费者组中的两个消费者,如下图,如果consumer2挂了,那么就需要通原创 2020-07-29 19:28:44 · 2347 阅读 · 1 评论 -
Kafka三种分区分配策略比较
分区分配指的是Kafka依据什么样的分配方式将多个主题中的多个分区与多个消费者进行对应。Range按范围分配。对于每个主题,我们按数字顺序排列可用分区,并按字典顺序排列消费者。然后,我们将分区数除以消费者总数,以确定要分配给每个消费者的分区数。如果它不能平均分配,那么前几个消费者将会有一个额外的分区。partition数/consumer数比如现在有两个消费者C0 ,C1两个主题t0 ,t1每个主题有3个分区,结果如下t0p0, t0p1, t0p2, t1p0, t1p1, t1p2最原创 2020-07-28 14:47:59 · 1952 阅读 · 0 评论 -
基于磁盘读写的Kafka为什么那么快?
我们都知道Kafka一大特点就是快,每秒甚至可以达到百万级别的吞吐量,然后这种级别的吞吐量居然还是基于磁盘的读写,那么kafka是如何做到的呢?接下来我们就一起来分析下其中的奥妙。磁盘顺序写对于一般的机械硬盘来说如果要查找某个数据,需要先寻址,然后通过机械运动(磁头臂驱动磁头找到对于的磁道、扇面)来读取数据,这种飘忽不定的查询方式就造成了大量的时间消耗在了机械运动上,磁头被不停的移来移去,所以说我们一般说的磁盘读写慢实际上更强调的是磁盘随机读写慢。所以相对随机读写,顺序读写就快很多了,因为顺序读写不需原创 2020-07-23 20:06:21 · 1973 阅读 · 3 评论 -
Kafka生产者发送消息的方式解析
kafka生产者为我们提供了三种发送消息的方式。原创 2020-06-28 22:07:53 · 3145 阅读 · 0 评论 -
Kafka和SpringBoot整合
Kafka和SpringBoot整合原创 2020-06-23 15:11:41 · 3633 阅读 · 0 评论 -
spring-kafka通过@KafkaListener实现消费者监听流程分析
首先通过@EnableKafka注解,注入KafkaBootstrapConfiguration类@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(KafkaBootstrapConfiguration.class)public @interface EnableKafka {}注入KafkaListenerAnnotationBeanPostProcessor,此类负责收集有@Kaf原创 2020-06-23 15:07:17 · 10735 阅读 · 2 评论 -
kafka消费者相关参数
111原创 2020-05-30 21:35:07 · 3132 阅读 · 0 评论 -
kafka高级知识点面试题
kafka是如何提高消息发送的吞吐量的?原创 2020-06-01 10:34:07 · 3607 阅读 · 0 评论 -
kafka生产者性能相关的参数理解
batch.size当多条消息发送到batch后,batch的上限大小(字节为单位),当达到上限时则会发送给kafka broker,设置的过小则降低了kafka的吞吐量,设置的过大则消息的延迟时间会拉长、占用了过高的内存...原创 2020-05-25 19:34:41 · 6122 阅读 · 1 评论 -
kafka生产者消息发送的流程与参数配置
kafka生产者发送消息的流程1、消息首先会被封装成ProducerRecord对象,ProducerRecord的构造方法有多种。可以指定要发送的分区spring提供的kafkaTemplate也可以指定分区发送,比如这里指定了发送到分区为1public String sendPartition() { for (int i = 0; i < 10; i++) { kafkaTemplate.send("test_topic", 1,"test_topic_key", Strin原创 2020-05-22 19:18:09 · 4692 阅读 · 0 评论 -
Kafka中关于集群副本的一些理解
什么是副本?简单的理解一下,副本就是对于分区中消息的备份,是kafka中通过数据的冗余保证高可用的一种方式,所以副本又是建立在kafka集群模式的基础上的。下图中标识的含义为:集群中有3台broker,一个名为topic的主题,设置了分区数为3,副本数量为3。首领和副本的含义稍后解释。如果分区的数量大于broker数量时,就会变成这样,其中一个broker上会存放2个分区首领。标识的含义为:集群中有2台broker,一个名为topic的主题,设置了分区数为3,副本数量为2。注意,副本的数量不原创 2020-05-21 16:33:35 · 4128 阅读 · 0 评论 -
Kafka中关于分区的一些理解
分区和主题一般我们会在一个topic下设置多个分区,这样多个分区对应多个消费者,以此可以提高kafka的吞吐量,相当于处理消息时达到了多线程并行执行的效果。分区和消息当生产者要向某个主题发送消息时,生产者会先将消息序列化处理,然后根据topic,serializedKey,serializedValue计算出当前消息应该发送到哪个分区中,默认情况下如果没有指定key值,则按照轮询的方式发送,如果指定了key值,则根据key值进行hash后取模发送,所以同一个key值得消息会始终被发送到一个分区中,也原创 2020-05-19 16:45:56 · 4597 阅读 · 2 评论 -
快速理解Kafka中的术语
Kafka核心功能概念原创 2020-05-18 21:48:18 · 2709 阅读 · 0 评论