0%

成为一个更好的架构师

本文翻译于SoftwareArchitect,原创翻译,有删减,介意请查看原文,转载请联系我。

扫码关注我

多年前,有人问我:”如何成为软件架构师?”。我认为需要必要的技能,经验以及积累知识所需的时间和奉献精神。

1. 内容

  • 软件架构师的定义
  • 软件架构的级别
  • 软件架构师的常规工作内容
  • 软件架构师的重要技能
  • 架构师技术路线图

2. 软件架构师的定义

在开始之前,让我们先看看这个定义。

  • 软件架构师是一位软件专家,他可以进行高层设计选择并决定技术标准,包括软件编码标准,工具和平台。首席专家被称为首席架构师。(来源:Wikipedia: Software Architect)

3. 软件架构的级别

阅读全文 »

Newegg Kafka 平台化的一点经验

本文基于IT技术圈(西安)10月份线下沙龙整理而来,略有删减。

扫码关注我

1. 前言

  • Newegg Kafka 使用规模
  • Newegg Kafka 使用场景
  • Newegg Kafka 平台化KafkaCenter
  • KafkaCenter 解决了什么问题
  • KafkaCenter 惊鸿一瞥
  • KafkaCenter 技术上的探索

2. Newegg Kafka 使用规模

我们是一家小公司,对Kafka的使用有限,这里我就放出我们系统的一个统计吧,数据截止到2019-10-30,仅统计目前已经接入Kafka平台管理的产线环境数据

每天指标如下:

MessagesIn BytesIn BytesOut
1.9b 2.26TB 12.23TB
阅读全文 »

Window下Docker Desktop搭建 Kubernetes

前言

本节主要讲解如何启用Kubernetes,以及如何搭建Kubernetes Dashboard。如果排除掉网络原因,本文没有任何意思,因为众所周知的原因,谷歌资源被墙,所以才存在搭建问题,这也就是写本文的原因。

因为不了解Kubernetes能做什么,所以才想着先搭建一个环境,玩一玩,看看这个到底能做什么。

准备

Docker Desktop 版本:2.1.0.1

支持Kubernetes版本:v1.14.3

查看这个版本很重要,具体查看About Docker Desktop菜单即可知道支持哪个版本的k8s。

首先安装Docker Desktop

安装Docker Desktop步骤略….

阅读全文 »

kafka幂等性和事务使用及实现原理

开篇

在开始这篇之前,先抛出问题,这章解决如下问题:

  1. 如何开启幂等性?
  2. 如何使用事务?
  3. 幂等性的原理
  4. 事务实现原理

正文

Producer 幂等性

Producer 的幂等性指的是当发送同一条消息时,数据在 Server 端只会被持久化一次,数据不丟不重,但是这里的幂等性是有条件的:

  • 只能保证 Producer 在单个会话内不丟不重,如果 Producer 出现意外挂掉再重启是无法保证的(幂等性情况下,是无法获取之前的状态信息,因此是无法做到跨会话级别的不丢不重);
  • 幂等性不能跨多个 Topic-Partition,只能保证单个 partition 内的幂等性,当涉及多个 Topic-Partition 时,这中间的状态并没有同步。

如果需要跨会话、跨多个 topic-partition 的情况,需要使用 Kafka 的事务性来实现。

使用方式:props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, "true");

阅读全文 »

Kafka 消息生产及消费原理

开篇

关于客户端生产和消费不在本文中探讨,本文主要集中在Kafka服务器端对消息如何存储和如何读取消息。

本文主要探讨如下问题:

  1. 服务器端接收到消息后如何处理?
  2. 如果我指定了一个offset,Kafka怎么查找到对应的消息?
  3. 如果我指定了一个timestamp,Kafka怎么查找到对应的消息?

正文

服务器端接收到消息处理流程

Kafka Server接受消息处理流程

KafkaApis是Kafka server处理所有请求的入口,在 Kafka 中,每个副本(replica)都会跟日志实例(Log 对象)一一对应,一个副本会对应一个 Log 对象。副本由ReplicaManager管理,对于消息的写入操作在Log与LogSement中进行的。

阅读全文 »

Kafka 逻辑架构设计

开篇

本文主要探讨如下问题;

  1. Kafka架构设计
  2. Kafka的日志目录结构

正文

Kafka架构设计

kafka为分布式消息系统,由多个broker组成。消息是通过topic来分类的,一个topic下存在多个partition,每个partition又由多个segment构成。

发布订阅者模式

kafka集群架构

阅读全文 »

开篇

在开始这篇之前,先抛出问题,这章主要通过研究consumer源码解决如下问题:

消费再均衡的原理是什么?

正文

消费再均衡的原理

主要分为四步

1.FIND_COORDINATOR

根据hash(group_id)%consumerOffsetPartitionNum查找出对应的partition,再查找出该partitiom对应的leader所在的broker,即可获得GroupCoordinator

2.JOIN_GROUP

在这一步主要完成消费组leader选举(获取第一个加入的组为leader,如果没有,选择map中的第一个node)和分区分配策略

阅读全文 »

kafka consumer 源码分析(二)分区分配策略

开篇

在开始这篇之前,先抛出问题,这章主要通过研究consumer源码解决如下问题:

分区分配策略是什么样的?

正文

分区分配策略

这里的分区分配策略仅仅只讨论consumer,关于producer端的分区不在本次探讨范围内。

consumer端分区分配策略官方有三种:RangeAssignor(默认值),RoundRobinAssignor,StickyAssignor

通常是通过partition.assignment.strategy配置生效。

RangeAssignor

阅读全文 »

kafka consumer 源码分析(一)Consumer处理流程

开篇

在开始这篇之前,先抛出问题,这章主要通过研究consumer源码解决如下问题:

  1. consumer处理流程
  2. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?

正文

Consumer处理流程

核心组件

ConsumerCoordinator: 消费者的协调者, 管理消费者的协调过程

  • 维持coordinator节点信息(也就是对consumer进行assignment的节点)
  • 维持当前consumerGroup的信息, 当前consumer已进入consumerGroup

Fetcher: 数据请求类

阅读全文 »

前言

零拷贝(英语:Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。

零拷贝操作减少了在用户空间与内核空间之间切换模式的次数

举例来说,如果要读取一个文件并通过网络发送它,传统方式下如下图,传统的I/O操作进行了4次用户空间与内核空间的上下文切换,以及4次数据拷贝。其中4次数据拷贝中包括了2次DMA拷贝和2次CPU拷贝。通过零拷贝技术完成相同的操作,减少了在用户空间与内核空间交互,并且不需要CPU复制数据。

linux中零拷贝技术

Linux系统的“用户空间”和“内核空间”

从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核空间(Kernel space)、用户空间(User space)。

“用户空间”和“内核空间”的空间、操作权限以及作用都是不一样的。

内核空间是Linux自身使用的内存空间,主要提供给程序调度、内存分配、连接硬件资源等程序逻辑使用;用户空间则是提供给各个进程的主要空间。

阅读全文 »