w1100n
This site is best viewed in Google Chrome
wiloon, 11/27/2019 16:06

Kafka的分区数是不是越多越好? 分区多的优点 kafka使用分区将topic的消息打散到多个分区分布保存在不同的broker上,实现了producer和consumer消息处理的高吞吐量。Kafka的producer和consumer都可以多线程地并行操作,而每个线程处理的是一个分区的数据。因此分区实际上是调优Kafka并行度的最小单元。对于producer而言,它实际上是用多个线程并发地向不同分区所在的broker发起Socket连接同时给这些分区发送消息;而consumer,同一个消费组内的所有consumer线程都被指定topic的某一个分区进行消费。 所以说,如果一个topic分区越多,理论上整个集群所能达到的吞吐量就越大。 分区不是越多越好 分区是否越多越好呢?显然也不是,因为每个分区都有自己的开销: 一、客户端/服务器端需要使用的内存就越多 Kafka0.8.2之后,在客户端producer有个参数batch.size,默认是16KB。它会为每个分区缓存消息,一旦满了就打包将消息批量发出。看上去这是个能够提升性能的设计。不过很显然,因为这个参数是分区级别的,如果分区数越多,这部分缓存所需的内存占用也会更多。假设你有10000个分区,按照默认设置,这部分缓存需要占用约157MB的内存。而consumer端呢?我们抛开获取数据所需的内存不说,只说线程的开销。如果还是假设有10000个分区,同时consumer线程数要匹配分区数(大部分情况下是最佳的消费吞吐量配置)的话,那么在consumer client就要创建10000个线程,也需要创建大约10000个Socket去获取分区数据。这里面的线程切换的开销本身已经不容小觑了。     服务器端的开销也不小,如果阅读Kafka源码的话可以发现,服务器端的很多组件都在内存中维护了分区级别的缓存,比如controller,FetcherManager等,因此分区数越多,这种缓存的成本就越大。 二、文件句柄的开销 每个分区在底层文件系统都有属于自己的一个目录。该目录下通常会有两个文件: base_offset.log和base_offset.index。Kafak的controller和ReplicaManager会为每个broker都保存这两个文件句柄(file handler)。很明显,如果分区数越多,所需要保持打开状态的文件句柄数也就越多,最终可能会突破你的ulimit -n的限制。 三、降低高可用性 Kafka通过副本(replica)机制来保证高可用。具体做法就是为每个分区保存若干个副本(replica_factor指定副本数)。每个副本保存在不同的broker上。期中的一个副本充当leader 副本,负责处理producer和consumer请求。其他副本充当follower角色,由Kafka controller负责保证与leader的同步。如果leader所在的broker挂掉了,contorller会检测到然后在zookeeper的帮助下重选出新的leader——这中间会有短暂的不可用时间窗口,虽然大部分情况下可能只是几毫秒级别。但如果你有10000个分区,10个broker,也就是说平均每个broker上有1000个分区。此时这个broker挂掉了,那么zookeeper和controller需要立即对这1000个分区进行leader选举。比起很少的分区leader选举而言,这必然要花更长的时间,并且通常不是线性累加的。如果这个broker还同时是controller情况就更糟了。 如何确定分区数量呢?   可以遵循一定的步骤来尝试确定分区数:创建一个只有1个分区的topic,然后测试这个topic的producer吞吐量和consumer吞吐量。假设它们的值分别是Tp和Tc,单位可以是MB/s。然后假设总的目标吞吐量是Tt,那么分区数 =  Tt / max(Tp, Tc) 说明:Tp表示producer的吞吐量。测试producer通常是很容易的,因为它的逻辑非常简单,就是直接发送消息到Kafka就好了。Tc表示consumer的吞吐量。测试Tc通常与应用的关系更大, 因为Tc的值取决于你拿到消息之后执行什么操作,因此Tc的测试通常也要麻烦一些。 ———————————————— 版权声明:本文为CSDN博主「AlferWei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/OiteBody/article/details/80595971

wiloon, 11/26/2019 10:57

MCC: 国家码 MNC: 运营商码 LAC: 位置区码, 大区 CellID: 基站塔码, 小区

wiloon, 11/20/2019 16:00

https://colobu.com/2016/12/21/how-to-dump-goroutine-stack-traces/ https://golang.org/pkg/net/http/pprof/ https://segmentfault.com/a/1190000016412013 import _ “net/http/pprof” go func() { fmt.Println(http.ListenAndServe(“localhost:6060”, nil)) }() go tool pprof http://localhost:6060/debug/pprof/heap

wiloon, 11/11/2019 18:21

http://idc.wanyunshuju.com/li/580.html

wiloon, 11/8/2019 9:49

state和status的区别 state:比较常用,各种状态都可以用它,但是它更着重于一种心理状态或者物理状态。 Status:用在人的身上一般是其身份和地位,作“状态,情形”讲时,多指政治和商业。 state倾向于condition,是一种延续性的状态。status常用于描述一个过程中的某阶段(phase),类似于C语言中枚举型变量某一个固定的值,这个值属于一个已知的集合。 比如淘宝买家问卖家“我的网购现在是什么状况?” 这个问题的背景是讲话双方都清楚,交易状态有“买家选购”“买家已付款”“卖家已发货”“买家已签收”或者有“买家已 投诉”等等状态。这些状态描述一件事情发展过程中的不同阶段。而且,这些阶段的先后顺序也是双方默许的。 所以在这里可以问“What’s the status of my purchase?”,此处用state不太贴切,如果硬用上去从语感上可能听着别扭。 说物态变化用state再恰当不过。如果说一个物质的四种状态,可以说“solid state”,但如果你说“solid status”,第 一,这两个词的组合不像是描述物态,更像是在说“确定的状况(solid产生歧义‘确定的/确凿的’)”;第二,这个说法即 使不被误解,也需要事先约定一组物态变化顺序,比如把这个物质从固态开始加热然后电离,可能先后经历固态、液态、气态、等离子态这四个阶段。类似先定义枚举,然后引用的方式。 扩展: ajax中readyState,statusText,onreadystatechange,window.status怎么一会state一会是status都晕乎了 state所指的状态,一般都是有限的、可列举的,status则是不可确定的。 比如 readyState — 就那么四五种值 statusText — 描述性的文字,可以任意 onreadystatechange — 那么四五种值之间发生变化 window.status — 描述性的文字,可以任意 来个形象的比方,你体重多少公斤,属于status,但说你体重属于偏瘦、正常还是偏胖,那就是state. https://www.cnblogs.com/likebeta/archive/2012/07/03/2574595.html

wiloon, 11/6/2019 11:02

& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 & 操作符 假设给定数值 a,b 只有满足 a = b = 1 的情况下下 AND(a,b) = 1,否则为 0 所以AND的另外一个很好的效果是可以用于把一个整数进行清零。 func main() { var x uint8 = … Continue reading

wiloon, 11/2/2019 22:38

Mosquitto介绍 Eclipse Mosquitto是一个开源(EPL / EDL许可)消息代理,它实现了MQTT协议版本3.1和3.1.1。Mosquitto重量轻,适用于从低功耗单板计算机到完整服务器的所有设备。 MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使其适用于物联网消息传递,例如低功率传感器或移动设备,如电话,嵌入式计算机或微控制器。 Mosquitto项目还提供了用于实现MQTT客户端的C库,以及非常流行的mosquitto_pub和mosquitto_sub命令行MQTT客户端。 Mosquitto是Eclipse Foundation的一部分,是一个iot.eclipse.org项目。 官网: http://mosquitto.org/ http://blog.itpub.net/31555484/viewspace-2375531/

TC1
wiloon, 11/2/2019 22:31

https://ljr.im/articles/streamline-the-fibonacci-tc1-firmware/ docker pull python:2-slim-stretch docker run -it –name mico -v /home/wiloon/tmp/mico:/workdir python:2-slim-stretch bash apt update && apt install git wget lib32ncurses5 ln -s /usr/local/bin/python /usr/bin/python #容器bash pip install mico-cube && \ cd /workdir && \ wget http://firmware.mxchip.com/MiCoder_v1.1.Linux.tar.gz && \ tar … Continue reading

wiloon, 11/1/2019 16:30

https://colobu.com/2019/02/23/1m-go-tcp-connection/ https://github.com/smallnest/1m-go-tcp-server

wiloon, 11/1/2019 13:29

vnote界面不响应的问题 新建一个系统环境变量QT_OPENGL,可以尝试的值包括desktop或angle或software。 https://tamlok.github.io/vnote/zh_cn/#!docs/%E7%94%A8%E6%88%B7/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.md#toc_8

辽ICP备14012896