大飞哥的博客

借书满架,偃仰啸歌,冥然兀坐,万籁有声

0%

kafka streams 是什么

Kafka 号称是一个开源的分布式流数据处理平台,其除了提供基本的 Consumer api 和 Producer api 用于处理基本的消费和生成数据外,还抽象和封装了功能更强大的 Streams api 用于实现基于 kafka 的流式计算。不同于flink、spark 等其他框架,kafka streams 仅仅是一个 java library,但通过深度结合 kafka 的种种高级特性,实现了一个轻量级、功能完备的流式计算框架, kafka streams 承载着 kafka 在流计算领域大展拳脚的野心,也逐渐成为 kafka 项目越发重要的组件。

流计算简介

借用 flink 官网的一张批量计算和流计算的图,我们能对二者的用户场景有一个较清晰的认识。

批量计算

流式计算

Read more »

背景

helm 是非常流行的 k8s 应用管理工具。类似于 python 中的 pip,我们使用 Chart 来定义一个 k8s 应用,使用 helm 来进行应用的安装、升级、发布和回滚。
本文旨在对 helm (v3) 的工作原理进行剖析,通过代码走查了解 helm 执行的具体过程,当使用 helm 出现问题时能更容易地定位。 (helm v2 的架构是 cli + server 的组合,已废弃)
源码的版本是v3.8.0

阅读本文的一些背景知识:

  • k8s 的基本概念:如 Deployment、 Service
  • golang 的基础知识
  • helm 的基本使用
Read more »

简介

自动化助手(TencentCloud Automation Tools,TAT)是云服务器 CVM 和轻量应用服务器 Lighthouse 的原生运维部署工具。自动化助手提供了一种自动化的远程操作方式,无需登录及密码,即可批量执行命令(Shell、PowerShell 及 Python 等),完成运行自动化运维脚本、轮询进程、安装/卸载软件、更新应用及安装补丁等任务。

TAT agent 运行在CVM 或 Lighthouse 内部,负责执行具体的任务,并上报执行结果给服务端。

Read more »

1. cross 介绍

cross 是 0 配置的 Rust 跨平台编译工具,它有着使用简单、功能强大的特点,极大地方便了 rust 跨平台项目的构建、测试和发布。

2. cargo 跨平台编译及问题

2.1 cargo 跨平台编译

cargo 本身支持跨平台编译,一般使用有如下命令:

  • 查看 target 列表
    rustup target list

  • 安装新的 target,以 i686-unknown-linux-gnu 为例
    rustup target add i686-unknown-linux-gnu

  • 编译 linux 32 gpu 的产物
    cargo build --release --target i686-unknown-linux-gnu

Read more »

容器的本质:特殊的进程

进程是程序和其运行所需要的计算机环境的总和,是计算机进行资源分配和调度的独立单位。 而容器则是一种特殊的进程,它被内核隔离在独立的命名空间下,享有独立的网络、磁盘、文件系统,并且被限制了执行所需要的资源(如cpu 内存等)。

容器同宿主机上其他进程一样, 同其他进程共享宿主机的内核,并接受内核的调度。

容器与虚拟机的区别,如下图所示:

图左画出了虚拟机的工作原理。Hypervisor通过硬件虚拟化功能,模拟出了运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等等。然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。

图右中并不存在一个Hypervisor层模拟各个硬件,它仅仅只是对容器进程的运行环境进行了限制,但仍然使用了宿主机的内核。

因此此图描述的不够严谨,系统中不存在真实运行的各个容器进程,这只不过是障眼法。

更严谨的应该如下图:

此图中,容器进程直接运行在宿主机上,被宿主机内核管理,docker仅仅起到旁路辅助和管理工作。
Read more »

前言

linus曾说过: “talk is cheap, show me the code”, 一个人的代码能在一定程度上代表他的技术水平,而参与开源项目,既能从中学习并提升自己,又可以在github上留下自己的足迹,供后人凭吊。

而且在知识付费盛行的今天,如何评判一个大佬是否真的在开源社区呼风唤雨,还是徒有虚名,仅仅改了个注释就以contributor自居。统计他的贡献,也能让我们擦亮眼睛,避免盲从被收了智商税。

that_is_me_on_github

这是一个python实现的cli, 用于统计某个username的github贡献信息,并生成markdown文档。 生成的Markdown中包含该用户的owned repos, followers, prs 和issues,比较能够全面地分析该用户的贡献。

项目地址
demo

Read more »

背景

Spark是大数据领域极为流行的处理引擎,它拥有丰富的套件和活跃的社区生态,其结合pyspark极大地提升了数据工程师理解和分析数据的生产力。

Kubernetes是近几年最火的开源项目之一,在经历2018年的快速发展后,kubernetes已经成为容器编排领域的事实标准。 在充分地支持了无状态服务之后,开源社区开始努力解决复杂有状态服务的容器编排,为此提出了operator的概念,用于解决复杂有状态服务的编排。 kubernetes将会全面支持大数据领域的资源编排和管理。

Spark在2.3.0版本支持了kubernetes作为原生集群runtime的功能,相关的讨论在SPARK-18278

本文主要基于谷歌云的spark-on-k8s-operator项目,实践在kubernetes集群使用operator部署spark,并运行pyspark demo job。

Read more »

为flink-deployer添加cancel job feature

kafkacat是一款go实现的用于部署flink jobs的cli, 它内部集成了flink rest api, 支持对flink job的部署,更新等。

目前支持的功能有:

  • Listing jobs
  • Deploying a new job
  • Updating an existing job
  • Querying Flink queryable state

我也在使用flink-deployer,用于集成ci/cd pipeline中,支持自动部署flink job到kubernetes集群。 但日常开发中,有时候会用到取消job的功能,但目前flink-deployer还不支持,但维护者支持其他contributor贡献该特性,因此我
打算贡献该特性,顺便实战入门下golang。

Read more »

hexo NexT主题集成disqus评论系统

为何需要评论系统

一个良好的博客系统,绝不仅仅是个人的琐碎日记本,把自己只言片语的感悟或者一知半解的知识散播到互联网上,这是很不负责的行为。 因为你的博文会被很多同领域的同学看到,如果博文的观点是错的,那将以讹传讹,不仅无丝毫借鉴意义,反而浪费他人的宝贵时间。那如何发现自己博文的不足甚至谬误呢? 一个良好的评论系统能帮到你。

Read more »


目标

将kafka中的日志写入elasticsearch,并要求支持以下功能:

  1. 根据日志时间建立index,便于后续对index的管理
  2. 使用log_id作为document_id,保持写入es的幂等性
  3. 对建立的多个index, 设置相同的alias (业务方使用alias进行query,对具体index不感知)
  4. 由于日志时间为epoch_seconds,无法被es自动引用为时间,需要进行字段mapping

软件版本及日志格式

软件版本

kafka: 2.1.0

elasticsearch: 6.6.0

kakfa-connect-elasticsearch: v5.1.1

logstash: 6.6.0

Read more »