如何通过kafka-streams实现去重后再groupBy统计频率?
使用Kafka-Streams做流计算的大家想必知道,它本身提供了 groupBy 操作可以方便我们做一些聚合计算,比如统计每分钟内每个人发出的消息数量,这个时候就可以 groupBy 用户的uid去,统计用户间互动消息频率就可以使用groupBy 用户uid和他的互动用户uid即可。
但如果现在需求是:如何统计每分钟和任一用户互动消息超过某频率的用户?
卡马克是最快的开根号方法吗
intro1:卡马克算法时最快的开根号方式吗?C/Java语言本身是怎么实现开根号的?
intro2: java的内置sqrt和c的内置sqrt哪个更快?Java的编译/JIT优化和GCC的编译优化是否有不足之处?
intro3: java的C2优化效果一定比C1效果好吗(对性能而言)?
问题或现象
这是最近看一位博主解Leet Code题想到的,原题简化一下是:给一个正整数(32位int)开根号后得到x,再对x取整返回。
博文的解法是使用二分查找,Java代码实现,不过这里想对该题再讨论几点
1)二分查找也可以优化下,建立一个简单的范围表,再二分查找,某几个国产IP库查询也是该做法(因为比BTree省太多内存)。
2)其实还可以用 牛顿切线法 ,每个ACMer入门练手时都会碰到的算法。
3)因为本题目只是要求返回正整数,那么如果我在 牛顿切分法阈值判断的时候,再加一个条件,判断本轮的整数部分和上一轮的整数部分是否相等,会不会更快?
4)开根号怎能少了卡马克算法,要知道在关于开根号方法中祭出卡马克算法,也就基本意味着本次交谈该结束了,但是卡马克是最快的方法吗?
Elasticsearch[曾]在布尔类型字段设计上犯的错
日志传输工具Logstash使用中遇到的几个问题(1)
intro:去年记录的logstash几个问题,因为涉及较多且杂乱,主题并不是那么清晰,今天整理时候发现写起来太长了,所以打算分成2-4篇文章,几个小块逐个讨论。
系统概况:
1)各服务产生事件(日志)另有一套Event机制支持,本文讨论的是如何跨数据中心(机房)传输。
2)普适性的,适合各语言实现的设计,故基于文件传输,即服务在本地产生滚动的日志,组件去 tail 文件的方式,将这些数据 即时 传输至另一个机房的Kafka。
3)logstash是5.6.4版本,kafka版本 0.10.0.1版本问题(再高版本的logstash 就不支持该版本的Kafka了)
4)logstash的input是滚动的日志文件,即tail_mode,output为kafka,无解析,插件开启了metric,queue 为 persistent,即文件模式,硬件为磁盘。
5)文件系统为ext4,系统inode是重用的。
6)本文贴出配置或数据已做脱敏处理,如有疑问请忽略。
本文先讨论遇到的两个问题
1)即便是 kill -15, logstash重启后会丢失数据
2)性能问题,可能消息大小会有影响,但观察下来logstash上传速率上限在 1.2万条/秒.
Mac电脑效能神器 Hammerspoon 入门和几个改善
intro1: 你是否为在Mac电脑上切换不同的应用时也需要切换输入法而觉得恼怒?比如刚在微信中文下聊天,这时转向命令行工具,打了一半才发现是中文,不得不再重新输入?
intro2: 如果你恰巧还是一名 hacker,是否苦于为了某些系统改进而搜索一堆 Applescript最后发现实现不了你要的功能。
intro3: 这是去年写的短文,一直没时间(懒)再深入完善,今天修改了些,但也只做了简单的入门和介绍
Hammerspoon
最近升级了Mac系统,发现之前的hammerspoon有个脚本耗电偏高,该脚本就是实现打开 Terminal/iTerm2(命令行)/Spotlight等可以将输入法自动切换到拼音输入法,打开Chrome/Firefox等可以自动切换中文输入法。
Elasticsearch删除特殊字符索引
长话短说,查看生产环境Elasticsearch (5.6版本) 时,发现一些如下有着非ascii码的索引
1 | red zhangxin-xxx-༠༠༣༡.༠༣.༢༢ |
上面是某系统因为历史缘故,使用用户的数据创建索引了,因暂时无法推动其做修改,于是需要考虑用脚本定时删除。
python 2.6.6 SimpleHTTPServer耗时的bug
之前因为时间紧迫的缘故,在公司的CentOS 7 机器上部署一个快速实现的数据收集工具,考虑到避免其他语言发布和变更起来麻烦,于是就用 python+bash 实现。
服务端就是最简单不引入任何python包的SimpleHTTPServer+Handler实现的。
偶然一次看日志发现本来应该在三分钟内完成的一个同步/上报循环结果未能如期完成,每个请求看起来相隔十秒左右,最后定位下来是python2.6.6的问题。
Many Links 0130
Running Envoy as an Edge Proxy at eBay: Replacing Hardware Load Balancers with a Software Solution
https://www.infoq.com/news/2018/12/envoycon-ebay-edge
eBay的Envoy实践。
Spring源码探究:容器
https://www.jianshu.com/p/4a82770fd188
你遇到过定义了一个拦截器/bean,在controller层的代码生效,而service层没生效?
这篇文章做了解读。虽然问题是适合Spring初学者,但是作者解释的还是清晰的,而且不过分深入,适合初步了解Spring。
Many Links 1119
NIPS不更名,我就撤资:赞助商加入联合抗议行列
https://www.jiqizhixin.com/articles/2018-11-02-12
不过后来还是改名字了 NeurIPS
以后看文章要找对地方啊。
2.
GitHub Incident Analysis Shows How to Improve Service Reliability
https://www.infoq.com/news/2018/11/github-incident-analysis
GitHub服务中断24小时11分钟事故分析报告
https://mp.weixin.qq.com/s/fFv1ASElHsVNEPPkP53qAQ
了解下:
GitHub 拥有多个 MySQL 集群,大小从几百 GB 到 5TB 不等,每个集群最多有几十个只读副本来存储非 Git 元数据,因此我们的应用程序可以提供拉取请求和问题管理、身份验证管理、后台处理协调等原始 Git 对象存储之外的其他功能。应用程序不同部分的数据通过功能分片存储在各种集群中。
为了大规模提高性能,应用程序将数据直接写入每个集群的主数据库,但在绝大多数情况下将读取请求委派给副本服务器。我们使用 Orchestrator 来管理 MySQL 集群拓扑和处理自动故障转移。Orchestrator 以 Raft 的共识算法为基础,可以实现应用程序无法支持的拓扑,因此必须十分小心让 Orchestrator 配置与应用程序的期望保持一致。
Java应用性能调优之调优准备
http://www.rowkey.me/blog/2018/10/31/profile-ready/
基本涵盖常见注意点,可以保存文章随时查阅。
总结简单记住几个命令:
Many Links 1025
stop using infinite scroll
https://logrocket.com/blog/infinite-scroll/
对无限滚动屏的吐槽,说起来可多了。
微软加入开放创新网络,旨在保护Linux和开源
http://www.infoq.com/cn/news/2018/10/microsoft-oin
微软是专利大企业,曾经用专利起诉著名企业,这次“拥抱Linux”,甚至打出了恶心的“ heart Linux”标语,至于未来如何,拭目以待。
An HTTP proxy for Elasticsearch, Solr (etc.) to prevent a 100% full disk situation.
https://github.com/flaxsearch/harahachibu