kafka 发送数据,如何确定partition源码解释

每一个record 都有一个key

其作用在于

  1 作为一个record的元数据

  2 用于分区,以便确定record进入到哪个,那么具体代码是如何实现的呢?我们查看下源码

partition
    如果所有的message是同一个key,将会被放入同一个partition
kafka发送一个消息的流程
    1 判断有没有拦截器,如果有拦截器就会执行拦截器的send

    2 拿到cluster
    3 对key和value序列化
    4 计算此消息发送到哪个partition

 partition计算过程具体如下:

  第二步:找到此接口的默认实现类,我们点进去看看

 第三步: 我们查看实现类

了解了源码以后,我们自己来实现一个partition

下面我们进行测试,在本机启动两个kafka,然后发送数据,测试数据会在哪个分区

  第一步:我们没有使用spring,那么框架并不会把我们自定义的partition来告知kafka,那么我们如何把自己写的partition加进去呢?我们来看源码

  猜测配置信息应该在kafka的配置类中,我们找到  ProducerConfig类 搜索partition开头的信息

第二步: 创建topic

第三步:编写Sender

 

 

第四步:测试

 当我们把key设置为LOGOFF时候,控制台打印如下

当我们把key设置LOGIN的时候,控制台打印如下

当我们设置非法key的时候

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

---恢复内容结束---

转载于:https://www.cnblogs.com/wangpipi/p/11103951.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值