当前位置: 首页 > news >正文

嘉兴品牌网站设计小程序推广有哪些好的方法

嘉兴品牌网站设计,小程序推广有哪些好的方法,免费推广网站软件,网络营销的概念和定义Producer源码解读 在 Kafka 中, 我们把产生消息的一方称为 Producer 即 生产者, 它是 Kafka 的核心组件之一, 也是消息的来源所在。它的主要功能是将客户端的请求打包封装发送到 kafka 集群的某个 Topic 的某个分区上。那么这些生产者产生的消息是怎么传到 Kafka 服务端的呢 Producer之整体流程 但是站在源码的核心角度我们可以把Producer分成以下几个核心部分 1、Producer之初始化 2、Producer之发送流程 3、Producer之缓冲区 4、Producer之参数与调优 Producer源码解读 从生产流程可以知道Producer里面的核心有序列化器分区器还有缓冲所以初始化的流程肯定是围绕这几个核心来处理。 KafkaProducer之初始化 1)、设置分区器 设置分区器(partitioner)分区器是支持自定义的 2)、设置每次重试间隔时间 设置每次重试间隔时间(retryBackoffMs)默认100ms 如果发送消息到broker时抛出异常且是允许重试的异常那么就会最大重试retries参数指定的次数同时retryBackoffMs是重试的间隔。 3)、设置序列化器 设置序列化器(Serializer) 4)、设置拦截器 设置拦截器(interceptors)关于拦截器这个后面会有讲解和介绍。 5)、设置缓冲区 在之前还有一些参数的设置。 1、设置最大的消息为多大(maxRequestSize), 默认最大1M, 生产环境可以提高到10M 2、设置缓存大小(totalMemorySize) 默认是32M 3、设置压缩格式(compressionType) 4、初始化RecordAccumulator也就是缓冲区指定为32M 6)、设置消息累加器 因为生产者是通过缓冲的方式发送发送的条件之前的课程讲过所以这里需要一个消息累加器配合才能完成消息的发送。 5、初始化集群元数据(metadata),刚开始空的 6)、创建Sender线程 这里还初始化了一个重要的管理网路的组件 NetworkClient KafkaThread将Sender设置为守护线程并启动 拦截器使用及介绍 这里讲一讲拦截器的使用和基本作用拦截器一般用得不多所以这里只是讲一讲案例不推荐生产中使用。 想要实现拦截器我们需要先实现ProducerInterceptor接口即可然后在生产者中设置进去即可。 1、想要把发送的数据都带上时间戳 2、实现统计发送消息的成功次数和失败次数 在 onAcknowledgement(RecordMetadata, Exception)里面根据消息发送后返回的异常信息来判断是否发送成功。一般异常如果为空就说明发送成功了反之就说明发送失败了。 然后定义两个变量并根据Exception的值分别累加就可以统计到了 最后在close方法里输出两个变量的值这样当producer发送数据结束并close后会自动调用拦截器的close方法来输出咱们想要统计的成功和失败次数 不过这里要注意一个点 onAcknowledgement运行在producer的IO线程中因此不要在该方法中放入很复杂的逻辑否则会拖慢producer的消息发送效率。 3、拦截链路 // 设置属性Properties properties new Properties();// 指定连接的kafka服务器的地址properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,127.0.0.1:9092);// 设置String的序列化properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);//设置自定义拦截器properties.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, SelfInterceptor.class);//设置拦截链路(设置多个 SelfInterceptor 先执行 再执行SelfInterceptor2)ArrayListString interceptors new ArrayList();interceptors.add(com.llp.interceptor.SelfInterceptor);//注意这里是拦截器的全类名interceptors.add(com.llp.interceptor.SelfInterceptor2); //这里假设有SelfInterceptor2properties.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, interceptors);拦截器链里的拦截器是按照顺序组成的因此我们要注意前后拦截器对彼此的影响比如这里拦截器1的onsend方法不能返回null不然拦截器2的onsend就丢失了信息会发生异常。 Producer之发送流程 Producer之发送流程 Kafka Producer 发送消息流程如下: 1)、执行拦截器逻辑 执行拦截器逻辑预处理消息, 封装 Producer Record 2)、集群元数据 从 Kafka Broker 集群获取集群元数据metadata 3)、序列化 调用Serializer.serialize()方法进行消息的key/value序列化 4)、分区 调用partition()选择合适的分区策略给消息体 Producer Record 分配要发送的 topic 分区号 5)、消息累加进缓存 将消息缓存到RecordAccumulator 收集器中, 最后判断是否要发送。 7)、消息发送 前面我们也知道真正的消息发送是Sender线程来做并且这里还要结合缓冲区来处理。 批次发送的条件为:缓冲区数据大小达到 batch.size 或者 linger.ms 达到上限哪个先达到就算哪个 Producer之缓冲区 Kafka生产者的缓冲区也就是内存池可以将其类比为连接池(DB, Redis),主要是避免不必要的创建连接的开销, 这样内存池可以对 RecordBatch 做到反复利用, 防止引起Full GC问题。那我们看看 Kafka 内存池是怎么设计的。 核心就是这段代码 Kafka 内存设计有两部分下面的粉色的是可用的内存未分配的内存初始的时候是 32M上面紫色的是已经被分配了的内存每个小 Batch 是 16K然后这一个个的 Batch 就可以被反复利用不需要每次都申请内存, 两部分加起来是 32M。申请内存的过程 从 Producer 发送流程的第6步中可以看到会把消息放入 accumulator中, 即调用 accumulator.append() 追加, 然后把消息封装成一个个Batch 进行发送, 然后去申请内存(free.allocate()) 1如果申请的内存大小超过了整个缓存池的大小则抛异常出来 2对整个方法加锁 this.lock.lock();3如果申请的大小是每个 recordBatch 的大小16K并且已分配内存不为空则直接取出来一个返回。 if (size poolableSize !this.free.isEmpty())return this.free.pollFirst();4如果整个内存池大小比要申请的内存大小大 this.availableMemory freeListSize size则直接从可用内存即上图粉色的区域申请一块内存。并且可用内存要去掉申请的那一块内存。 Sender线程 Producer之参数调优 Kafka 实际使用中Producer 端既要保证吞吐量又要确保无消息丢失一些核心参数的配置就显得至关重要。接下来我们就来看看生产端都有哪些重要的参数,及调优建议。 acks 参数说明对于 Kafka Producer 来说是一个非常重要的参数它表示指定分区中成功写入消息的副本数量是 Kafka 生产端消息的持久性的保证, 详细可以查看 发送确认机制 3 种不同的确认模式。 acks0 意味着如果生产者能够通过网络把消息发送出去那么就认为消息已成功写入Kafka 。 acks1 意味若首领在收到消息并把它写入到分区数据文件不一定同步到磁盘上时会返回确认或错误响应。 acksall 意味着首领在返回确认或错误响应之前会等待min.insync.replicas同步副本都收到悄息。max.request.size 参数说明这个参数对于 Kafka Producer 也比较重要 表示生产端能够发送的最大消息大小默认值为1048576(1M) 。 调优建议这个配置对于生产环境来说有点小 **为了避免因消息过大导致发送失败生产环境建议适当调大比如可以调到10485760(10M)** 。retries 参数说明表示生产端消息发送失败时的重试次数默认值为0即不重试。 这个参数一般是为了解决因系统瞬时故障导致的消息发送失败比如网络抖动、Leader 选举及重选举其中瞬时的 Leader 重选举是比较常见的。因此这个参数的设置对于 Kafka Producer 就显得非常重要 。 调优建议这里建议设置为一个大于0的值比如3次。retry.backoff.ms 参数说明**设定两次重试之间的时间间隔避免无效的频繁重试默认值为100, 主要跟 retries 配合使用 **在配置 retries 和 retry.backoff.ms 之前最好先估算一下可能的异常恢复时间需要设定总的重试时间要大于异常恢复时间避免生产者过早的放弃重试。 connections.max.idele.ms 参数说明主要用来判断多久之后关闭空闲的链接默认值540000ms即9分钟。 compression.type 参数说明 该参数表示生产端是否要对消息进行压缩默认值为不压缩(none)。 压缩可以显著减少网络IO传输、磁盘IO以及磁盘空间从而提升整体吞吐量但也是以牺牲CPU开销为代价的。 调优建议出于提升吞吐量的考虑建议在生产端对消息进行压缩。**对于Kafka来说综合考虑吞吐量与压缩比建议选择lz4压缩。如果追求最高的压缩比则推荐zstd压缩。**buffer.memory 参数说明 该参数表示生产端消息缓冲池或缓冲区的大小默认值为即33554432(32M) 。这个参数基本可以认为是 Producer 程序所使用的内存大小。 调优建议通常我们应尽量保证生产端整体吞吐量建议适当调大该参数也意味着生产客户端会占用更多的内存。batch.size 参数说明 该参数表示发送到缓冲区中的消息会被封装成一个一个的Batch分批次的发送到 Broker 端默认值为16KB。 因此减小 batch 大小有利于降低消息延时增加 batch 大小有利于提升吞吐量。 调优建议通常合理调大该参数值能够显著提升生产端吞吐量比如可以调整到32KB调大也意味着消息会有相对较大的延时。linger.ms 参数说明 该参数表示用来控制 Batch 最大的空闲时间超过该时间的 Batch 也会自动被发送到 Broker 端。 实际情况中, 这是吞吐量与延时之间的权衡。默认值为0表示消息需要被立即发送无需关系 batch 是否被填满。 调优建议通常为了减少请求次数、提升整体吞吐量建议设置一个大于0的值比如设置为100此时会在负载低的情况下带来100ms的延时。
http://www.pierceye.com/news/864919/

相关文章:

  • 网址输入奉化seo页面优化外包
  • 坪山商城网站建设哪家效益快教务管理系统是应用软件吗
  • 深圳网站搭建找谁怎么在手机上制作app
  • 做app和做网站的区别桂林市天气预报15天
  • 高端织梦html5网站模板 dedecms网络公司模板关键词排名优化方法
  • 上海网站建设咨找个网站2021能看到
  • 可以用服务器做网站查询公司信息
  • 个人可以备案企业网站吗旅行社网站 模板
  • 三丰云做网站步骤网站怎么上传ftp
  • 做二手车有哪些网站有哪些手续网站建设单位有哪些方面
  • 建设网站的和服务器常州免费网站制作
  • 电子外贸网站重庆有什么好玩的
  • 商务网站的建设阶段包括郑州的做网站公司哪家好
  • 深圳网站建设网络公司七星彩网投网站建设
  • 手机建网站公司wordpress增加关键字
  • 招聘网站有哪些平台电商网站建设方式
  • 网站的备案要求域名icp备案查询
  • 网站的投资和建设项目站群服务器
  • 建网站电脑版和手机版怎么做网页实训总结及心得体会
  • 网站建设咨询费用一流的网站建设流程图
  • 如何进行营销型企业网站的优化如何在百度上推广自己
  • 360怎么变成建设银行首选网站网站建设财务分析
  • 建设网站的法律可行性分析快手自媒体平台
  • 网站建设的内容规划网站空间 阿里云
  • 网站建设横幅wordpress论坛怎么用
  • 做金融网站违法吗喜迎二十大演讲稿
  • 010-58813333 可信网站做网站的流程是怎么样的
  • 凉山州住房和城乡建设局门户网站南昌seo招聘
  • 恒华大厦做网站公司学校网站制作素材
  • 网站上的动图都怎么做的伊犁州新源县地图高清版