言成言成啊 | Kit Chen's Blog

Kafka消息队列

老规矩,学东西先学文档

一、Kafka概述

1.1 定义

kafka是一个分布式的基于发布/订阅模式消息队列Message Queue,主要应用于大数据实时处理领域。

1.2 消息队列

MQ的传统应用场景的异步处理

使用消息队列的好处

  1. 解耦:允许你独立的扩展或者修改两边的处理过程,只要确保它们遵守同样的接口约束
  2. 可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可在系统恢复后被处理
  3. 缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息处理速度不一致的情况。
  4. 灵活性&峰值处理能力:突发流量平时不常见,如果用硬件来解决,会浪费大量资源。使用消息队列能使关键组件顶住突发的访问压力,而不会因为突发的超负荷请求而完全崩溃。
  5. 异步通信:消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理。想向队列中放入多少消息就放多少,然后在需要的时候再处理它。

消息队列模式

  1. 点对点模式(一对一,消息消费后,消息被清除,不可重复消费)
    • 生产者生产消息发送到queue中,然后消费者从queue中取出并且消费信息。
    • 消息被消费以后,queue中不再存储,所以消费者不可能消费到已经被消费的消息
    • queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费
  2. 发布订阅模式(一对多,消费者消费数据后,不会清除消息,可以重复消费)
    • 生产者生产消息到topic中,同时有多个消费者消费该消息。类似于一个发布/订阅,比如微信公众号的推送

发布订阅模式有两种类型

  1. 消费者主动拉取数据
    • 缺点:消费者端需要维护一个长轮询,一直向生产者请求是否有最新数据。
  2. 消息队列推送数据
    • 缺点:资源浪费

1.3 kafka架构

整个架构可以参照下面这张图

Producer :消息生产者,就是向 kafka broker 发消息的客户端;

Consumer :消息消费者,向 kafka broker 取消息的客户端;

Consumer Group(CG):消费者组,由多个consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个topic。

Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;

Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上, 一个 topic 可以分为多个 partition,每个partition 是一个有序的队列;

Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower。

leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。

follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的 follower。

二、Kafka快速入门

此处涉及到sublime编辑远程服务器文件。

步骤

  1. sublime按ctrl+shfit+p,输入install,输入install package,搜索并安装sftp
  2. 本地新建文件夹,右键文件夹MapRemote,编辑配置文件
  3. 下载同步文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
// The tab key will cycle through the settings when first created
// Visit https://codexns.io/products/sftp_for_subime/settings for help

// sftp, ftp or ftps
"type": "sftp",

"save_before_upload": true,
"upload_on_save": false,
"sync_down_on_open": false,
"sync_skip_deletes": false,
"sync_same_age": true,
"confirm_downloads": false,
"confirm_sync": true,
"confirm_overwrite_newer": false,

"host": "192.168.21.103",
"user": "root",
"password": "root",
//"port": "22",

"remote_path": "/opt/module/kafka",
"ignore_regexes": [
"\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
"sftp-settings\\.json", "/venv/", "\\.svn/", "\\.hg/", "\\.git/",
"\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
],
//"file_permissions": "664",
//"dir_permissions": "775",

//"extra_list_connections": 0,

"connect_timeout": 30,
//"keepalive": 120,
//"ftp_passive_mode": true,
//"ftp_obey_passive_host": false,
//"ssh_key_file": "~/.ssh/id_rsa",
//"sftp_flags": ["-F", "/path/to/ssh_config"],

//"preserve_modification_times": false,
//"remote_time_offset_in_hours": 0,
//"remote_encoding": "utf-8",
//"remote_locale": "C",
//"allow_config_upload": false,
}

2.1 安装

2.2 命令行操作

发布:2021-05-03 17:35:02
修改:2021-05-07 01:52:01
链接:https://meethigher.top/blog/2021/kafka/
标签:java 
付款码 打赏 分享