kafka笔记

初识kafka

kafka(分布式提交日志、分布式流平台)是一个分布式发布-订阅消息系统;强大的队列。前端

能够处理大量数据,并可以使消息从一个断点传递另外一个断点。redis

适合离线和在线消息消费。数据库

kafka消息保留在磁盘上,并在群集内复制,以防止数据丢失。数组

kafka构建在zk同服务之上。与Apache Storm和spark很是好的集成,用于实时流式数据分析。服务器

kafka的优势:微信

性能(对于发布和订阅消息具备高吞吐量,即便TB消息,也能保证稳定的)、可靠性、耐用性(分布式提交日志,这保证了消息尽量快保留在磁盘上,所以是持久的)、可扩展性(Kafka消息传递系统轻松缩放,无需停机)。网络

kafka数据处理步骤:异步

一、Producer产生消息,发送到Broker中分布式

二、Leader状态的Broker接收消息,写入到相应topic中post

三、Leader状态的Broker接收完毕之后,传给Follow状态的Broker做为副本备份

四、Consumer消费Broker中的消息

发布-订阅

数据(消息)的发送者(发布者)不会直接把消息发送给接收者,这是发布与订阅消息系统的一个特色。发布者以某种方式对消息进行分类,接收者(订阅者)订阅它们。以便接收特定类型的消息。发布与订阅系统通常会有一个broker,也就是发布消息的中心点。

  • 消息和批次

kafka的数据单元:消息

能够将消息当作数据库里的一个“数据行“或者一条“记录“。消息由字节数据组成。

对于Kafka,消息里的数据没有特别的格式或含义。 消息能够有一个可选的元数据(键)。 键也是一个字节数组,与消息同样,对Kafka来讲也没有特殊含义。 当消息以一种可控的方式写入不一样的分区时,会用到键。

最简单的例子:为键生成一个一致性散列值,而后使用散列值对主题分区数进行取模,为消息选取分区。 这样能够保证具备相同键的消息老是被写到相同的分区上。

为了提升效率,消息被分批次写入Kafka。批次(一组消息),这些消息属于同一个主题和分区。若是每个消息都单独穿行于网络,会致使大量的网络开销,把消息分红批次传输能够减小网络开销。不过,,这要在时间延迟和吞吐量之间做出权衡:批次越大,单位时间内处理的消息就越多,单个消息的传输时间就越长。 批次数据会被压缩,这样能够提高数据的传输和存储能力,但要作更多的计算处理。

  • 消息和分区

Kafka的消息经过主题进行分区。主题就比如数据库的表,或者文件系统的文件夹。主题能够被分为若干个分区,一个分区就是一个提交日志。消息以追加的方式写入分区,而后先入先出的顺序读取。 要注意,因为一个主题通常包含几个分区,所以没法在整个主题范围内保证消息的顺序,但能够保证消息在单个分区内的顺序。

主题有4个分区,消息被追加写入每一个分区的尾部。Kafka经过分区来实现数据冗余和伸缩性。分区能够分布在不一样的服务器上。一个主题能够横跨多个服务器,以此来提供比单个服务器更强大的性能。

公司分布式项目用到了kafka消息中间件,所以对kafka有一个初步的认识,后续逐渐深刻探索kafka的神奇之处。

项目中怎么运用:

某一个业务操做触发EventBus事件,经过异步的方法监听此事件,发布kafka消息,处理复杂的业务逻辑。我在作项目时,好比直播开播消息提醒,病例解答完后,发各类消息(系统消息、短信消息、弹窗推送、微信消息),

  • 考虑消息的同步和异步:作视频直播打点记录用户的观看记录时,经过发异步消息时,进程外事件监听,处理复杂业务逻辑(由于视频打点太频繁,若是直接立刻处理,有异常的话,须要前端感知,其实前端不care这种异常;例如:相似定火车票同样,,用户不关注后续抢票流程,用户感知不到。)须要保证消息幂等,不可重发。

  • 考虑消息幂等的实现: 数据库能够加字段squence;存储redis中,而后查询该消息是否已经发过。

感谢 资料

相关文章
相关标签/搜索