ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kafka核心技术与实战 09 生产者消息分区机制原理剖析

2021-05-24 11:29:20  阅读:107  来源: 互联网

标签:key 策略 分区 09 Kafka 剖析 消息 Key


分区

分区提供负载均衡、高性能

分区策略

所谓分区策略是决定生产者将消息发送到哪个分区的算法,Kafka 为我们提供了默认的分区策略,同时它也支持你自定义分区策略。

  • 自定义分区策略
  • 轮询策略
  • 随机策略
  • 按消息键保序策略,Key-ordering 策略

轮询

随机

Kafka 允许为每条消息定义消息键,简称为 Key。这个 Key 的作用非常大,它可以是一个有着明确业务含义的字符串,比如客户代码、部门编号或是业务 ID 等;也可以用来表征消息元数据。特别是在 Kafka 不支持时间戳的年代,在一些场景中,工程师们都是直接将消息创建时间封装进 Key 里面的。一旦消息被定义了 Key,那么你就可以保证同一个 Key 的所有消息都进入到相同的分区里面,由于每个分区下的消息处理都是有顺序的,故这个策略被称为按消息键保序策略,如下图所示。

前面提到的 Kafka 默认分区策略实际上同时实现了两种策略:如果指定了 Key,那么默认实现按消息键保序策略;如果没有指定 Key,则使用轮询策略。

Java客户端默认的生产者分区策略的实现类为org.apache.kafka.clients.producer.internals.DefaultPartitioner。默认策略为:如果指定了partition就直接发送到该分区;如果没有指定分区但是指定了key,就按照key的hash值选择分区;如果partition和key都没有指定就使用轮询策略。而且如果key不为null,那么计算得到的分区号会是所有分区中的任意一个;如果key为null并且有可用分区时,那么计算得到的分区号仅为可用分区中的任意一个

常见问题

  • 在消息重试的时候,分区策略会重新再计算一次吗?比如一开始选择到5号分区,但是5号分区有问题导致重试,重试的时候可以重试发送到别的分区上吗?

不会的。消息重试只是简单地将消息重新发送到之前的分区

  • kafka和rocketMQ的对比

\1. Kafka吞吐量大,多是面向大数据场景。RocketMQ吞吐量也很强, 不过它号称是金融业务级的消息中间件,也就是说可以用于实际的业务系统;2. RocketMQ毕竟是阿里出品,在国内技术支持力度要比Kafka强;3. Kafka现在主要发力Streaming,RocketMQ在流处理这块表现如何我不太清楚,至少streaming不是它现阶段的主要卖点。

  • 一个生产者,发两次消息,但是网络原因,消息到达的顺序和消息发送的顺序不一致

防止乱序可以通过设置max.in.flight.requests.per.connection=1来保证

  • key在哪指定,怎么指定啊

Producer发送消息的时候可以直接指定key,比如producer.send(new ProducerRecord(“my-topic”, “key”, “value”));

标签:key,策略,分区,09,Kafka,剖析,消息,Key
来源: https://blog.csdn.net/abu935009066/article/details/117219721

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有