zoukankan      html  css  js  c++  java
  • Kafka生产者

    1配置生产者参数
    必须的3个参数
    brokerlist:服务端地址,集群地址,至少配置2个,会自动获取其他的服务端地址;
    key序列化类:
    value序列化类:
     
    非必须:
    clientid:不填 会给producer-数字
     
    2创建生产者实例
    KafkaProducer p = new KafkaProducer(prop);//prop 就是上面几个参数;
     
    3创建消息实体
    ProducerRecord r = new ();好多种构造
    需要的 参数:
     
    含义
    是否必填
     
    主题
     
    分区号
    不是,不填则有分区器生成分区号;
     
    key
    不是
     
    value
    不是,空即为墓碑消息
     
    header
    不是
    可以添一些其他消息,来实现其他功能,如TTL
     
    4发送消息
     
    p.send(r)
    发后即忘
    最高效,可靠性最低
     
    p.send(r).get();
    同步发送
    低,可靠性高
     
    p.send(r,new CalllBack(){});
    异步发送
    高效, 可靠性高
     
     
     
     
     
    kafka客户端
    消息到服务端的流程
     
    消息先经过生产者拦截器,onsend( )方法,可以对 消息内容改变;
    -——》
    序列化器,对key和value,将对象转化成字节数组;
    -——》
    分区器,查看参数是否带有分区号,有,直接跳过;没有,根据进入设置的分区器方法,得到分区号a
    -——》
    sender线程会将
    Map<分区号,Dueue<ProducerBath>>转化成
    Map<Node,List<Request>>,node代表需要发送的各个节点,List<Request>代表这个节点需要发送的消息结合;当消息大小达到最小限制后,批量发送
     
    -——》
    inFlightRequests这里还有一个Map<Node,List<Request>>,来判断每个连接,有几个未返回的响应,如果list的size超过了系统设置的inflights.size的个数,则直接返回失败;
    没有超过,往当前node对应的list中add一个Request,继续
    -——》
    服务端写入消息,返回成功或者失败
     
     
    kafka服务端,判断是否发送成功?
    系统参数ack 
    -1,代表需要所有ISR副本都追加了这个消息,才返回成功
    1,只要leader副本追加了这个消息,就返回成功
    n, 代表需要n个ISR副本都追加了这个消息,才返回成功
     
    |
    |
    |
     
     
     
     
    拦截器的确认方法执行;
    然后才是异步发送的回调函数执行;
    这里还有一个Map<Node,List<Request>>,来判断每个连接,有几个未返回的响应,这里remove一个Request
    《——————
     
    生产者发送的都是线程安全的;
     
     
    默认的分区策略是:
    • 如果在发消息的时候指定了分区,则消息投递到指定的分区
    • 如果没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区
    • 如果既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区
     
  • 相关阅读:
    js怎样生成json的数据
    JS中生成与解析JSON
    [转]js动态创建json类型
    handlebars模板库的资源
    一指流沙,倾覆了谁的年华?
    c# const与readonly 关键字的比较
    静态类和静态构造函数
    编写跨浏览器兼容的 CSS 代码的金科玉律
    mysql 分页sql
    EF报LINQ to Entities 不识别方法“Web_JZRepository.Models.copy_materials_details get_Item(Int32) ”,因此该方法无法转换为存储表达式。
  • 原文地址:https://www.cnblogs.com/xlblog/p/15473188.html
Copyright © 2011-2022 走看看