KAFKA Producer 相关内容

  1. 生产者(producer)
    1. 会分为两个线程一个双端队列(RecordAccumulator) 双端队列大小默认 32m
      1. 线程细节:
        1. 主线程主要执行 过滤器/序列化器/分区器 然后添加到双端队列中
        2. Sender线程 不断从队列中拉取数据发送到 broker
        3. Sender线程 默认每个broker节点最多缓存5个请求 Selector 应用 和 netty NIO
        4. 默认 达到批次大小 或者 到达指定时间后 发送请求
          1. batch.size 默认 16k
          2. linger.ms 单位ms 默认 0
      2. 双端队列细节
        1. buffer.memory 可设置双端队列的默认大小 默认 32m
    2. 序列化器
      1. key.serializer key序列化器 必须写全类名
      2. value.serializer value序列化器 必须写全类名
    3. 分区器
      1. 指定分区 ;
      2. 根据 key的hash值 取 主题的partition的数量 取模;
      3. 自定义分区 实现 partitioner 重现 partition 方法 返回分区数 ;
    4. 生产者参数配置:
      1. acks
        1. 0:生产者发送过来数据 ,不需要等待数据落盘应答。
        2. 1:生产者发送过来数据,需要等待leader数据落盘后应答。
        3. -1(all):生产者发送过来数据,需要等待leader及isr中的队列里面所有的节点数据收齐后应答。默认值是-1
      2. max.in.fight.request.per.connection:允许最多没有返回的ack的次数,默认为5,开启幂等性要保证该值是1-5的数字。
      3. retries:发送失败重试次数 默认值 Integer 的最大值 如果设置了重试,还想保证消息的有序性,需要设置 MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION=1 否则在重试此失败消息的时候,其他的消息可能发送成功了。
      4. retry.backoff.ms:两次重试之间的时间间隔,默认是100ms。
      5. enable.idempotence:是否开启幂等性 默认true 开启。
      6. compression.type:生产者发送的所有数据的压缩方式,默认是none,也就是不压缩。支持的压缩方式:none,gzip,snappy,lz4和zstd;
    5. 生产者发送消息 优化
      1. 缓冲区大小 适当调大 32m -> 64m
      2. 批处理大小 适当调大 16k -> 32k
      3. 间隔时间调整 从0 -> 5
      4. 压缩方式调整 none -> snappy
    6. 生产经验 数据可靠性
      1. ack应答原理
        1. 0:生产者发送过来数据 ,不需要等待数据落盘应答。
        2. 1:生产者发送过来数据,需要等待leader数据落盘后应答。
        3. -1(all):生产者发送过来数据,需要等待leader及 ISR 里面所有的节点数据收齐后应答。默认值是-1
      2. 数据去重
        1. 至少一次(At Last Once) -> ack级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2;
        2. 最多一次(At Most Once) -> ack级别设置为 0
        3. 精确一次(Exactly Once) -> 数据不能重复也不能丢失 幂等性和事务;
          1. 幂等性
            1. Producer不管向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复;
            2. 重复数据的判断依据,具有<PID,Partition,SeqNumber>相同主键的消息提交时,Broker只会持久化一条,其中PID是Kafka每次重启都会分配一个新的,Partition表示分区号,Sequence Nnumber 是单调递增的;所以幂等性只能保证在单分区单会话内不重复;
            3. 开启幂等性 enable.idempotence 设置为 true;
          2. 生产者事务
            1. 开启事务必须开启幂等性。
        4. 至少一次 可以保证数据不丢失,但是不能保证数据不重复;
        5. 最多一次 不能保证数据不丢失;
      3. 数据有序性
        1. 单分区内数据有序
        2. 多分区 分区与分区之间无序
        3. max.in.flight.requests.per.connection 生产者在收到服务器服务器相应之前还可以发送多少个消息
        4. 开启单分区有序的方法
          1. max.in.flight.requests.per.connection = 1 无需考虑是否开启幂等性
          2. max.in.flight.requests.per.connection 1-5 需要开启幂等性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值