Kafka原理
摘自一篇博客,找不到了
Kafka技术概览
Kafka的特性
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
可扩展性:kafka集群支持热扩展
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
高并发:支持数千个客户端同时读写
Kafka一些重要设计思想
下面介绍先大体介绍一下Kafka的主要设计思想,可以让相关人员在短时间内了解到kafka相关特性,如果想深入研究,后面会对其中每一个特性都做详细介绍。
ElasticSearch
Disruptor
SimHash
本篇主要是对网上资源的整理,缺乏原创。
什么是SimHash
SimHash是一种局部敏感hash(即Locality Sensitive Hashing,感兴趣可以自行学习下),是google用来处理海量文本去重的算法。
与普通Hash区别
传统的加密式hash,比如md5,其设计的目的是为了让整个分布尽可能地均匀,输入内容哪怕只有轻微变化,hash就会发生很大地变化。
我们理想当中的哈希函数,需要对几乎相同的输入内容,产生相同或者相近的hashcode,换句话说,hashcode的相似程度要能直接反映输入内容的相似程度。很明显,前面所说的md5等传统hash无法满足我们的需求。
Double-Array Trie
ZooKeeper watch机制
zookeeper watch机制
一个zk的节点可以被监控,包括这个目录中存储的数据的修改,子节点目录的变化,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。
Kafka官方文档翻译--设计
Design
Motivation
我们设计Kafka用来作为统一的平台来处理大公司可能拥有的所有实时数据源。为了做到这点,我们必须思考大量的使用场景。
它必须有高吞吐去支持大数据流,例如实时日志聚合。
它必须优雅的处理数据积压,以支持定期从离线系统加载数据。
这也以为这系统必须支持低延迟的分发来处理传统消息系统的场景。
我们想支持分区的、分布式的、实时的处理数据源并创建新的数据源,这推动了我们的分区和消费模型。
最后,将流反馈到其他系统进行服务的情况下,我们知道系统必须能够保证容错性,在部分机器故障的时候提供服务。
支持这些使用推动我们做了一些列特殊的元素设计,比起传统的消息系统更像是数据库日志。我们将在以下章节介绍一些设计要素。
Kafka官方文档翻译--简介
ZSH 安装
介绍下比较好用的zsh安装以及相关的配置