卡夫卡的藏书阁【Book15】- KafkaJS 生产者 - 参数设定 3

“I have the true feeling of myself only when I am unbearably unhappy.”
― Franz Kafka
躁郁症就在你我身边


生产者的方法 send 有多个参数可以带入

await producer.send({
    topic: <String>,
    messages: <Message[]>,
    acks: <Number>,
    timeout: <Number>,
    compression: <CompressionTypes>,
})
  • topic: 主题名称
    • 预设值:null
  • messages: 物件的阵列
    • 物件内容可以包含:
      • key
      • value
      • partition
      • timestamp
      • headers
    • 范例: [{ key: 'my-key', value: 'my-value'}]
    • 预设值:null
  • acks
    • -1 = 预设值,也就是 all,必须要所有的副本都回报有收到讯息後,生产者才算是从代理 ( broker ) 收到传送成功的讯息,如果资料是极度重要、不可遗失,可以选择此模式
    • 0 = 不需要任何代理回报有收到,就认定传送成功,如果有分区坏掉没收到,生产者也不会知道,是速度最快的模式
    • 1 = 只要分区领袖 ( partition leader ) 有回报收到,就算讯息传送成功,但仍然有可能遗失资料,当原本的 partition leader 挂掉,而新的 partition leader 也没有这笔资料时,资料就遗失了
      • 预设值:-1
  • timeout: 等待回应时间(毫秒)
    • 预设值:30000
  • compression: 编码解码器 ( Compression codec )
    • 预设值:CompressionTypes.None

生产者预设会用以下三种逻辑去决定要将讯息传送到哪个分区:

  1. 如果生产者有指定分区 ( partition ),那就会传送讯息到那个分区
  2. 如果生产者没有指定分区 ( partition ) ,但是有讯息有带入 key 参数,那会使用 murmur2 hash 出来的值去决定分配到哪个分区
  3. 如果生产者没有指定分区,也没有带入 key 参数,那就会按照每个分区轮流发送讯息 ( round-robin fashion )

讯息的标头

Kafka 版本 0.11 之後有支援讯息加上标头 ( headers ),让你可以加上更多的资讯, 标头是可以存放多个 key-value 的物件

await producer.send({
    topic: 'topic-name',
    messages: [{
        key: 'key1',
        value: 'hello world',
        headers: {
            'correlation-id': '2bfb68bb-893a-423b-a7fa-7b568cad5b67',
            'system-id': 'my-system'
        }
    }]
})


<<:  [Day 24] 筹码分析 - 内线消息

>>:  Day14-Load Balance

Day 3 - Array 阵列组合技 (2)

前言 前一篇介绍了 forEach、filter、map、reduce,算是平常我比较常使用,而且在...

Day 03 - 环境安装(下) JDK & Spring Tool Suite

环境安装的最後一个环节,就是安装我们的开发工具,本篇教学使用Spring Tool Suite (S...

【Day27】 在 Swift 中去呼叫 C/C++ 程序码

有时候进去多平台开发,或更新原本就平台的程序码时 ,需要使用现有的新技术去呼叫之前写好的 C/C++...

DE2_115(DAY2)用niosii和switch还有NiosII console去控制板子上的led

DE2_115(DAY2)用niosii和switch还有NiosII console去控制板子上的...

Day 22 | 使用相机获取影像

相机 可以使用Intent的方式(可复习Activity内容),开启装置上的相机应用程序获取影像,回...