Kafka

Kafka案例

偶尔善良 提交于 2021-02-20 16:43:28
假设我们正在开发一个多人在线网络游戏。游戏中,玩家需要在虚拟世界中进行合作或者展开竞争。玩家之间也常常存在各种交易,包括钱、道具等。因此游戏开发人员必须保证玩家没有作弊,规则如下:如果玩家交易额显著高于正常水平或者玩家登录的IP地址与之前20次登录的不一样,那么交易将被标记可疑。除了实时标记交易以外,我们还希望可以将这些数据导入到Apache Hadoop以方便数据科学家训练、测试他们的算法与模型。 为了提高实时的事件标记的效率,我们尽可能利用游戏服务器的内存。游戏系统包含了多台游戏服务器,因此在设计中,我们会在内存中保存每一个用户最近的20次登录记录以及最新的20次交易明细(数据是分布式存储的)。 游戏服务器主要扮演两个不同的角色:接收并传播用户行为,实时处理交易信息并对可疑事件进行标记。为了高效的扮演第二个角色,我们需要将任何一个用户的交易历史保存在一台服务器的内存中。这就意味着我们不得不在服务器之间传输消息,毕竟接收用户行为数据的服务器未必包含了该用户的交易历史。为了保持角色之间的松偶和,我们利用Kafka在不同服务器之间传输消息。 Kafka的特性使得它可以很好的满足我们的需求:可扩展、数据分区、低延迟以及处理大量异构消费者的能力。在该案例中,我们为登录与交易处理定义了一个主题。之所以使用同一个主题主要是因为我们希望在处理交易事件前已经获得用户登录信息了

基于 Serverless 技术的视频截帧架构实战

∥☆過路亽.° 提交于 2021-02-20 16:03:30
前言 视频直播是一种创新的在线娱乐形式,具有多人实时交互特性,在电商、游戏、在线教育、娱乐等多个行业都有着非常广泛的应用。随着网络基础设施的不断改善以及社交娱乐需求的不断增长,视频直播在持续渗透进大家的日常生活,并占据用户的零碎休闲时间。视频直播的技术支撑能力也在不断提高,从而促进视频直播市场规模从2014的212.5亿元增长到2020年的548.5亿元,并将在未来五年继续以12.8%左右的增长率快速发展。 视频截帧需求概述 直播行业受到越来越多的法律、法规和政策的规限,在行业一般标准和运营规程的约束下,每一个直播平台都有义务对非法的直播内容,以及主播与观众之间的不当互动采取措施,为直播行业更为规范的发展做出贡献。如何第一时间监控到直播流中的非法内容,是直播平台需要面对的共同挑战,视频截帧就是满足内容审核需求的常规操作。视频截帧可以根据视频直播的不同风险等级,选择不同的频率对直播流进行截帧处理,保存后的图片可以统一上传到自建或第三方内容审核平台,用于涉黄、涉政、广告等场景的识别。除此之外,某些特定的业务需求也需要通过视频截帧来实现,比如在线课堂类应用对学生的听课状态进行智能分析等。 视频截帧技术架构分析 对于视频流的截帧操作,可以通过FFmpeg命令实现。FFmpeg的截帧命令使用非常简单,每次截取一张图片后,可以将图片上传到对象存储OSS

ELK 日志收集系统

半城伤御伤魂 提交于 2021-02-20 14:15:31
1. ELK简介 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下。因此我们需要集中化的管理日志,ELK则应运而生。ELK=ElasticSeach+Logstash+Kibana,本项目采用的是 ElasticSeach + Logstash + kafka + Kibana 2. 各个组件介绍 2.1 Logstash Logstash 主要用于收集服务器日志,它是一个开源数据收集引擎,具有实时管道功能。Logstash 可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。 Logstash 收集数据的过程主要分为以下三个部分: 输入:数据(包含但不限于日志)往往都是以不同的形式、格式存储在不同的系统中,而 Logstash 支持从多种数据源中收集数据(File、Syslog、MySQL、消息中间件等等)。 过滤器:实时解析和转换数据,识别已命名的字段以构建结构,并将它们转换成通用格式。 输出:Elasticsearch 并非存储的唯一选择,Logstash 提供很多输出选择。 2.2 Elasticsearch Elasticsearch (ES)是一个分布式的 Restful 风格的搜索和数据分析引擎,它具有以下特点: 查询

【Zookeeper】Zookeeper集群环境搭建

狂风中的少年 提交于 2021-02-20 12:57:46
Zookeeper是一个开源的高效分布式协调服务,可以用来协调其他分布式集群实例间的执行调度,比如Kafka的集群就使用Zookeeper来管理,在Zookeeper的文件树结构中,存放着Kafka的一些节点元数据信息,比如broker信息,消费者信息,topic信息等。Kafka可以从Zookeeper上获取相关信息,保证各个实例间的元数据是一致的。 另外,Zookeeper也可以作为一个服务注册和发布服务,比如作为Dubbo的服务注册中心,用来管理各个服务实例发布的接口信息。 Zookeeper的定位是一个分布式的协调服务,所以它并不能像Kafka或者Redis一样存储大量的数据,它的树状的结构上的节点中只能存储少量的信息,不过能存储的数据量以及完全满足它的分布式协调和服务注册和发现中心的要求了。 下面搭建一个Zookeeper的集群,便于后续的学习使用。 在VM中创建了三台linux虚拟机,IP地址分别是: 192.168.200.128 192.168.200.129 192.168.200.130 首先去官网下载zookeeper的软件包: http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/ 下载之后上传到三台服务器上: 把压缩包解压到opt目录下,使用 sudo tar -zxvf apache

Kafka生产消费API JAVA实现

霸气de小男生 提交于 2021-02-20 08:02:53
Maven依赖: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.0.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11</artifactId> <version>0.10.0.0</version> </dependency> Kafka生产者简单接口JAVA实现: import org.apache.kafka.clients.producer.*; import java.util.Properties; public class KafkaProducer { public static void main(String[] args) throws Exception{ String topic = ""; String brokerList = ""; String message = ""; Properties props = new Properties(); props.put("bootstrap.servers", brokerList); props.put(

Kafka 使用Java实现数据的生产和消费demo

我的梦境 提交于 2021-02-20 07:37:27
前言 在 上一篇 中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka 。不过在使用kafka的时候,还是应该简单的了解下kafka。 Kafka的介绍 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 Kafka 有如下特性: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。 同时支持离线数据处理和实时数据处理。 Scale out:支持在线水平扩展。 kafka的术语 Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker。 Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处) Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition。 Producer:负责发布消息到Kafka broker。 Consumer

分布式专题|最近一直死磕kafka设计原理,都肝吐了

≯℡__Kan透↙ 提交于 2021-02-19 22:47:19
点击上方 蓝字 关注我们 文末有惊喜 kafka架构图 在这里插入图片描述 kafka核心控制器 定义 在kafka集群中,会选举出一个broker作为控制器(controller),负责管理集群中所有的分区和副本的状态; 职责 监听broker变化,通过监听Zookeeper中的/brokers/ids/ 节点方式来实现 监听topic变化,通过监听Zookeeper中的/brokers/topics节点方式来实现,实时监听topic变化 管理topic、partition、broker相关的信息 更新数据的元数据信息,同步到其他的broker节点 选举过程 broker控制器选举的原理是借助于zookeeper的临时节点实现:kafka集群启动时,每个broker都会尝试争当控制器,都会往zookeeper的controller节点注册自己,但是由于zookeerper的特性,如果节点已经创建过,再创建就会失败,所以只会有一个broker创建成功,那么创建成功的broker就会成为控制器;此外其他broker都会监听这个controller节点 在这里插入图片描述 由于controller是临时节点,当控制器broker挂机之后,就会断开与zookeeper的会话连接,临时节点也会消失,其它节点监听到controller节点消失后,就会重新争取controller节点。

每天学一个 Linux 命令(39):tar

主宰稳场 提交于 2021-02-19 20:54:13
点击下方“ 民工哥技术之路 ”,选择“设为星标” 回复“ 1024 ”获取独家整理的学习资料! 昨日推荐: 每天学一个 Linux 命令(38):vi/vim 命令简介 tar 命令用于打包、压缩与解压压缩包文件。 tar 命令常常用于打包、压缩某些文件或目录,也可以添加新文件到归档文件中。Tar 代表的是磁带存档,是一种归档的文件格式,早期用于将文件归档到磁带备份存储。现可以用于收集、分发、归档文件,还可以保留文件原有的属性,如:用户和组权限,访问和修改日期以及目录结构。 语法格式 tar [OPTIONS] [FILE] 选项说明 -A #新增文件到已经存在的归档文件 -B #设置区块大小 -c #建立新的归档文件 -C #将压缩的文件解压到指定的目录下 -d #记录文件的差异 -x #解压或提取归档文件内容 -t #列出备份文件的内容 -z #通过gzip命令来压缩/解压缩文件,文件名一般为 xx.tar.gz -Z #通过compress命令处理备份文件 -f #指定备份文件 -v #显示命令执行过程 -r #添加新文件到已经压缩的文件中 -u #添加改变了和现有的文件到已经存在的压缩文件 -j #通过bzip2命令来压缩/解压缩文件,文件名一般为xx.tar.bz2 -v #显示操作过程; -k #保留原有文件不覆盖 -m #保留文件不被覆盖 -w #确认压缩文件的正确性

面试官问:你说说Redis的几个过期策略?

这一生的挚爱 提交于 2021-02-19 10:47:41
在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。 设置过期时间 expire key time(以秒为单位) 这是最常用的方式 setex(String key, int seconds, String value) 字符串独有的方式 除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间如果没有设置时间,那缓存就是永不过期如果设置了过期时间,之后又想让缓存永不过期,使用persist key 三种过期策略 定时删除 在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除 优点: 保证内存被尽快释放 缺点: 若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key 定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重 懒汉式式删除 key过期的时候不删除,每次通过key获取值的时候去检查是否过期,若过期,则删除,返回null。 优点: 删除操作只发生在通过key取值的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的

为什么黑客从不用鼠标,一直在敲键盘?看完长见识了

落花浮王杯 提交于 2021-02-18 15:21:17
点击下方“ 民工哥技术之路 ”,选择“设为星标” 回复“ 1024 ”获取独家整理的学习资料! 在各种好莱坞大片里头,但凡需要“技术小子”表现一下如何用几分钟时间黑掉一个庞大IT系统的时候,里面的电脑都是这样的: 文字处理软件从来不显示光标。 所有的屏幕都显示1英尺高的字符。 高技术的计算机都有简单易用的图形界面。 即便是没有图形界面,计算机也能正确理解自然语言并执行。 只需要敲入“读出秘密文件”(“Access The Secret Files”),计算机就会给出任何你想要的信息。 仅仅通过敲入“上载病毒”(“Upload Virus”),就能够攻击一台计算机。 黑客总是能够在仅仅猜测密码一两次的情况下,就进入保密的计算机。 磁盘可以用在任何有软盘驱动器的计算机上,并且所有的软件可以工作在任何平台上。 笔记本计算机总有实时电视电话能力,它们的性能就是比超级CRAY计算机也不差。 有一个细节是,很多时候里面出现特别专业的操作电脑的画面时,基本没有鼠标的影子!还记得《黑客帝国》里接线员坦克操作的电脑么?不仅是图形界面,而且是键盘操作——根本没有放鼠标或者轨迹球的地方——再就是显示器屏幕旁的几个旋钮扳来扳去。 当然电影就是电影,不过黑客鼠标用得少也是事实,据某黑客的专业解读: 1、懒得搞图形界面。 看起来简单的图形界面实现起来工作量非常大