Elasticsearch Mapping

刘启春

Elasticsearch Mapping 类似关系数据的的 schema(模式),Mapping 记录了索引的字段、字段数据类型,以及 Lucene 是怎样索引数据的。

在给新业务数据建索引时,需要进行的第一步就是 Mapping 设计,许多不重视的这个环节的,数据量增大后就暴露出了问题。

Elasticsearch 创建索引

刘启春

创建索引需要通常需要指定三部分内容:

  • settings:索引配置,如索引分片数、副本数、索引刷新时长等
  • mappings:索引字段的映射(mapping)
  • aliases:索引的别名
{
  "settings": {},
  "mappings": {},
  "aliases": {}
}

简明 Elasticsearch 8x 安装教程

刘启春

Elasticsearch 8.x 默认开启了安全功能,在远程服务器配置多实例时很容易安装失败,官方的教程只适合本地单实例启动,对于那些想探索 Elasticsearch 高级特性的人需要折腾一大阵,不知折戟沉沙了多少人。

本文主要介绍多实例 Elasticsearch 集群搭建,最后安装 Kibana 实现查询管理。

注意本教程的软件版本,后期的版本可能不适用。

  • Elasticsearch & Kibana:8.15.3
  • OS:CentOS 7

Redis 实现发布订阅

刘启春

发布订阅(pub/sub)是一种消息通信模式,本质是实现队列(先进先出)的远程操作功能。

使用 redis 实现发布订阅有 3 种方式:

  1. 使用列表(list)数据结构,通过 lpush、rpop(brpop)实现队列先进先出
  2. 使用 redis 发布/订阅功能
  3. 使用 redis 5.0 stream 数据结构(功能)

结论:虽然 redis 可以作为消息队列,但是严谨的生产环境还是应该选择专业的 MQ,因为可靠性是软件的基石。

Java 协程

刘启春

协程本质上和线程是一类概念,本质上是编程过程中对并发计算任务的一种抽象,只不过协程在调度层面上更轻量。

线程的调度由于是操作系统实施的,有时间片/中断等较为复杂的机制,因此调度点对用户是透明的,可以认为调度理论上可以在任何地方触发。而协程的调度点往往是用户代码显式通过触发的(发生在用户态),需要用户代码自己相互“协作”来完成任务的调度和执行,这也是协程中”协“的来源。

Kafka Rebalance

刘启春

Rebalance 是指,将一个 Topic 下的多个队列,在同一个消费组的多个成员之间进行重新分配。

比如,一个 Topic 下 8 个队列,只有一个消费者时,一个消费者将处理 8 个队列的消息。如果在组内增加一个消费者,在不重启服务的情况,将 8 个队列分配给两个消费者,从而支持动态的并行处理消息。

乌兰察布之旅

刘启春

上周末和朋友一起去了乌兰察布,广袤的草原和火山,整个景色给人的感觉很空旷,让人很放松,工作久了出来转一转还不错。我们游玩的顺序是:乌兰哈达的 5 号火山 -> 2 号火山 -> Day2 -> 黄花谷,整个旅程中除了在路上花费了一些时间外,体验还是不错的。

在下面还有一些拍的视频。

摘|具有适应性的复杂系统

刘启春

当我们说一个组织是一个具有适应性的复杂系统时,我们指的是:

  • 它包含许多相互依赖的部分(比如人员、技术、流程、文化等)。
  • 各个部分可以自行改变自己的行为,并适应系统的变化。

宇宙中充满了这类的系统,而且关于复杂性的研究已成为一门成熟的科学学科。 就连你自己也是一个具有适应性的复杂系统。你可能认为自己是一个单元(即一个自我),但是“自我”只是一种抽象。实际上,你是有机细胞的集合,尽管这个细胞集合拥有许多惊人的能力:思考、移动、感知,并作为一个全新的整体对外部做出反应。从细胞的角度来说,你的每个细胞都有专门的作用,细胞会进行新陈代谢,细胞群通过协同工作对你的身体产生巨大的影响。你体内生物系统的复杂性使得你的身体具有高度的弹性和适应性。虽然你不能长生不老,但由于体内复杂的生物系统,你仍然可以承受巨大的环境变化,甚至是人身伤害。