日常业务开发很重要、很常用的一章

提纲:如何使用Kafka生产者;如何创建KafkaProducer、ProducerRecords;如何将记录发给Kafka;如何处理从Kafka返回的错误;一些配置项;不同的分区方法、序列化器,以及它们的自定义。

Kafka提供了生产者的API。

ProducerRecord → 序列化器→分区器 → 批次→发送→broker→broker响应

【3.2 创建Kafka生产者】

bootstrap.servers

连接的broker地址,格式 host:port,多个用英文逗号分隔。只要配一个broker,生产者就能根据这个线索找到其他broker。建议至少配俩,搞个备用。

key.serializer

前面说过,broker接受的键值都是字节数组,所以java对象要转换。

value.serializer

值的序列化,必须要指定序列化器

【ProducerRecord 】含义: 发送给Kafka Broker的key/value 值对;

这玩意儿就是被发的消息全貌,叫生产者记录

内部数据结构:
-- Topic (名字)
-- PartitionID ( 可选)
-- Key( 可选 )
-- Value

生产者记录(简称PR)的发送逻辑:
<1> 若指定Partition ID,则PR被发送至指定Partition
<2> 若未指定Partition ID,但指定了Key, PR会按照hasy(key)发送至对应Partition
<3> 若既未指定Partition ID也没指定Key,PR会按照round-robin模式发送到每个Partition
<4> 若同时指定了Partition ID和Key, PR只会发送到指定的Partition (Key不起作用,代码逻辑决定)

生产者记录(PR)的实现:
 针对发送逻辑,提供三种构造函数形参:

-- ProducerRecord(topic, partition, key, value)

-- ProducerRecord(topic, key, value)

-- ProducerRecord(topic, value)

【发送消息 3种方式】

发送并忘记

—— 只管发,不管到了没有

同步发送

—— send()以后,返回一个Future对象,用get()等待返回的RecordMetadata()对象,对象里有offset;若返回不允许重试的异常or超过重试次数,就会抛异常。

比如无主no leader异常可以通过为分区选首领解决,所以是可重试异常;

连接异常,通过重新再次建立连接解决,是可重试异常;

消息过大,不重试

异步发送

—— send(),指定一个回调函数,服务器响应时调用这个函数;

发消息更快,

注意看第4点,send()的时候,传了一个回调的对象

【3.4 生产者的配置】

从第37页开始,写了12个配置项,用到的时候再看

【3.5 序列化器】

Kafka提供了默认的字符串、整型、字节数组的序列化器,

【3.5.1 自定义序列化器】——不建议使用

这里说怎么自定义开发序列化器。

讲道理,序列化器,这个词儿真拗口。

有几个序列化框架,Avro(强烈推荐)、Thrift、Protobuf、或自定义。

自定义的话,就比如,把入参模型的A字段序列化成4字节整数、B字段序列化成4字节整数……

如果模型变更,序列化方法就得重写。

【3.5.2 使用Avro序列化】

Apache Avro,一种与编程语言无关的序列化格式。数据被序列化成二进制文件(常用)/JSON文件。他的scheme通过JSON来描述。

后面没看懂。

【3.6 分区】

没有指定key的时候,消息会被随机的发到topic的各个分区上。分区器来干这个活,它用轮询Round Robin算法将消息均衡的各个分区上。

指定key的时候,且使用默认分区器,Kafka会对key进行散列,用的是Kafka自己的散列算法,所以不受Java版本的影响。然后把消息映射到特定分区,同一个key总是被映射到同一个分区上。

获取的是所有的分区,不只是可用的分区,所以如果有的分区挂了,就会发生错误。

分区数量不变时,key和partition之间的映射就不变。如果分区增加了,可能用户0123的旧数据在分区34,新记录写到分区99了。

可以搞自定义分区策略,比如把key为Banana的消息固定写入最后个分区。我当前没有看到这样使用的场景。

《Kafka权威指南》读书笔记3 Kafka生产者相关推荐

  1. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  2. MongoDB权威指南读书笔记——CRUD

    插入并保存文档 插入是向MongoDB中添加数据的基本方法.可以使用Insert方法向目标集合插入一个文档:db.foo.insert({"bar" : "baz&quo ...

  3. HTTP权威指南读书笔记

    <<HTTP权威指南>>读书笔记 第一部分:Web的基础 第1章:HTTP概述 主要内容 1.什么是HTTP 2.HTTP的基本组件 HTTP HTTP:HTTP(Hypert ...

  4. HTML5权威指南----读书笔记

    <!DOCTYPE html> <html> <head><meta name = 'keywords' content="HTML5权威指南--- ...

  5. 初识Kafka-概念速览|安装与配置—《Kafka权威指南》笔记

    文章目录 初识Kafka 消息 批次 模式 主题与分区 生产者和消费者 broker和集群 保留消息 多集群 Kafka数据生态 安装与配置 安装 Java 安装 Zookeeper Zookeepe ...

  6. 计算机网络和http权威指南 读书笔记

    计算机网络笔记 网络层 网络层向上提供无连接的,尽最大努力交付的数据报服务 网络层不提供数据质量承诺 物理层使用的中间设备叫转发器repeater 数据链路层叫网桥bridge 网络层叫路由器rout ...

  7. MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)

    文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...

  8. 《kafka权威指南》之深入Kafka

    文章目录 集群节点 节点ID 控制器 复制 处理请求 物理存储 分区分配 文件管理 文件格式 索引 清理日志 删除消息 Kafka 如何进行复制 Kafka 如何处理来自生产者和消费者的请求 Kafk ...

  9. android开发读书笔记,android开发权威指南读书笔记

    第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...

  10. java性能权威指南中文_Java性能权威指南读书笔记--之一

    JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...

最新文章

  1. SAP RETAIL 商品主数据POS视图
  2. 计算机网络ip地址的分类
  3. 为什么 M1 和 Mac 是绝配?
  4. mysql查看存储过程工作记录20130711
  5. 《Groovy语言规范》-语法(三)
  6. 利用公众号 + WeRoBot开发一款AI应用
  7. 使用java将字符串写入到指定的文件中
  8. Scala程序将字符串转换为整数
  9. ubuntu下面如何切换virtual_box的鼠标
  10. [动态规划] leetcode 10 正则表达式匹配
  11. Python Imaging Library: ImageMath Module(图像数学运算模块)
  12. 清理300多台MySQL数据库的过期binlog日志
  13. java 根据身份证计算年龄(周岁)
  14. 饥荒联机一直显示正在启动服务器,饥荒联机版启动服务器时间长 | 手游网游页游攻略大全...
  15. antd4.0中Form使用initialValue
  16. javascript-异步之Promise then和catch
  17. 打开我的收藏夹 -- Python时间序列分析篇
  18. matlab导弹追踪,导弹追踪代码
  19. 拉格朗日乘数法 和 KTT条件
  20. 黑客急于利用微软的零日漏洞

热门文章

  1. SQL SERVER添加表注释、字段注释
  2. 联想笔记本启动u盘linux系统下载,制作linux启动u盘(rufus)
  3. [32位汇编系列]004 - 对话框资源的使用(2)
  4. Python 调用中控门禁并包装成webservice供移动设备调用。
  5. 【Unity开发笔记】导入大地图
  6. Ubuntu16.04 开机出现检测到系统程序出现问题
  7. 计算机管理员工作内容,系统管理员岗位工作职责
  8. 高清加载巨图方案-拒绝压缩图片
  9. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第42讲:PHP数据库开发案例
  10. 基于php的网上鲜花销售系统论文,网上鲜花销售系统 毕业设计论文