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

时间: 2024-08-01 09:45:30

kafka 发送数据,如何确定partition源码解释的相关文章

kafka 0.8.1 新producer 源码简单分析

1 背景 最近由于项目需要,需要使用kafka的producer.但是对于c++,kafka官方并没有很好的支持. 在kafka官网上可以找到0.8.x的客户端.可以使用的客户端有C版本客户端,此客户端虽然目前看来还较为活跃,但是代码问题还是较多的,而且对于c++的支持并不是很好. 还有c++版本,虽然该客户端是按照c++的思路设计,但是最近更新时间为2013年12月19日,已经很久没有更新了. 从官方了解到,kafka作者对于现有的producer和consumer的设计是不太满意的.他们打算

ASP.NET多页面传递数据,附框架源码

很多时候我们需要把数据传递到多个页面,比如表单提交可以指定提交数据到某个页面,那么关闭某个页面怎么把数据传递到上一个页面或者它的父页面. 在这里我附一段源码用于当前页面关闭指定某个页面刷新. 子页面方法 //保存表单; function AcceptClick(callback) { if (!$('#form1').Validform()) { return false; } var postData = $("#form1").GetWebControls(keyValue); $

IOS开发数据存储篇--FMDB源码分析3(FMDatabaseQueue+FMDatabasePool)

一.前言 如上一章所讲,FMDB源码主要有以下几个文件组成: FMResultSet : 表示FMDatabase执行查询之后的结果集. FMDatabase : 表示一个单独的SQLite数据库操作实例,通过它可以对数据库进行增删改查等等操作. FMDatabaseAdditions : 扩展FMDatabase类,新增对查询结果只返回单个值的方法进行简化,对表.列是否存在,版本号,校验SQL等等功能. FMDatabaseQueue : 使用串行队列 ,对多线程的操作进行了支持. FMDat

js格式化json数据 + json着色 - 附源码

其实json格式化没想象中的那么复杂,难点就是json格式化的工作流程. 正好工作上需要,于是就搞了一套json格式化+json着色的方法,原生的方法,可以直接使用.json数据格式化前后对比图,如下: 下面是源码,可以根据个人需求适当修改: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js格

爬虫之数据解析,网页源码数据分析

数据解析,就是对网页源码数据的解析和清洗,获取自己想要的数据信息. 常用的数据解析有下面四种: 1.正则 2.bs4 3.xpath 4.pyquery 一: 正则:熟练使用正则表达式,对数据进行提取即可 二:BS4 解析原理: 1.实例化一个BeautifulSoup的一个对象,并且将即将被解析的页面源码加载到该对象中 2.调用bs对象中相关属性和方法进行标签定位和数据的提取 环境安装: pip install lxml pip install bs4 使用; from bs4 import

MapReduce(十六): 写数据到HDFS的源码分析

1)   LineRecordWriter负责把Key,Value的形式把数据写入到DFSOutputStream 2)   DFSOutputStream负责把LineRecordWriter写入的数据发送到Datanode中.对LineRecordWriter写入的数据首先按照一个个chunk分割,然后打包成Packet发送给datanode,datanode负责对接收的数据备份到其它datanode上.发送数据时,发送线程和结果接收线程分开,对发送队列的数据完成发送后,转移的结果接收队列中

Apache ZooKeeper Watcher 机制源码解释

分布式系统从根本上来说就是不同节点上的进程并发执行,并且相互之间对进程的行为进行协调处理的过程.不同节点上的进程互相协调行为的过程叫做分布式同步.许多分布式系统需要一个进程作为任务的协调者,执行一些其他进程并不执行的特殊的操作,一般情况下哪个进程担当任务的协调者都无所谓,但是必须有一个进程作为协调者,自动选举出一个协调者的过程就是分布式选举.ZooKeeper 正是为了解决这一系列问题而生的.上一篇我们介绍了 ZooKeeper 服务启动原理和源代码剖析,这一讲我们来谈谈 Watcher 机制,

分享《R数据科学》+PDF+源码+哈德利.威克姆 +×××欣

下载:https://pan.baidu.com/s/1Hd5vRzA46bqHSyfL5n0wOQ 更多资料分享:http://blog.51cto.com/14087171 <R数据科学>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,374页,带目录和书签,彩色配图,文字能够复制粘贴:高清英文版PDF,520页,带目录和书签,彩色配图,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://blog.51c

Apache ZooKeeper 服务启动源码解释

转载:https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper-code/ 本文首先讲解了 Apache ZooKeeper 服务启动的三种方式,即 Standalone.伪分布式.分布式.然后针对分布式模式启动步骤进行逐步介绍,从 Shell 脚本开始,一直介绍到服务完全启动过程中所有的执行过程.通过本文读者基本可以掌握 ZooKeeper 如何启动.启动过程中做了哪些工作. 分布式系统从根本上来说就是不同节点上的进程并发