kafka

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: kafka

一、消息队列介绍

1.1 为什么需要消息队列 (MQ)

主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,

导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。


我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,

消息通讯等场景当前比较常见的 MQ 中间件有 ActiveMQ、RabbitMQ、RocketMQ、Kafka等。


1.2 使用消息队列的好处

(1)解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。


(2)可恢复性

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。


(3)缓冲

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。


(4)灵活性 & 峰值处理能力

在访问量剧增的情况下, 应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。 使用消息队列能够使关键组件顶住突发的访问压力, 而不会因为突发的超负荷的请求而完全崩溃。


(5)异步通信很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制, 允许用户把一个消息放入队列, 但并不立即处理它。 想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。


1.3 消息队列的两种模式

(1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

消息生产者生产消息发送到消息队列中, 然后消息消费者从消息队列中取出并且消费消息。 消息被消费以后,

消息队列中不再有存储,所以消息消费者不可能消费到已经被消费的消息。消息队列支持存在多个消费者, 但是

对一个消息而言,只会有一个消费者可以消费。


(2)发布/订阅模式(一对多, 又叫观察者模式,消费者消费数据之后不会清除消息)

消息生产者 (发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。

发布/订阅模式是定义对象间一种—对多的依赖关系,使得每当一个对象(目标对象)的状态发生改变,则所有依赖干它的对象(观察者对象)都会得到通知并自动更新。


二、Kafka相关介绍

2.1 Kafka定义

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


2.2 Kafka简介

Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于 hadoop的批处理系统、低延迟的实时系统、Spark/Flink 流式处理引擎,nginx 访问日志,消息服务等等,用 scala 语言编写, Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。


2.3 Kafka的特性

高吞吐量、低延迟

Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。


可扩展性

kafka 集群支持热扩展


持久性、可靠性

消息被持久化到本地磁盘,并且支持数据备份防止数据丢失


容错性

允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)


高并发

支持数干个客户端同时读写


三、安装kafka群集

第一台zookeeper安装kafka:

1.解压并改名

tar xf kafka_2.11-2.2.1.tgz 
mv kafka_2.11-2.2.1 /usr/local/kafka


2.修改配置

cd /usr/local/kafka/config/
cp server.properties server.properties.bak
vim server.properties
broker.id=1
listeners=PLAINTEXT://192.168.8.10:9092
log.dirs=/usr/local/kafka/logs
zookeeper.connect=192.168.8.10:2181,192.168.8.20:2181,192.168.8.30:2181
zookeeper.connection.timeout.ms=60000


3.复制kafka目录到其他服务器

scp -rp /usr/local/kafka/ root@192.168.8.20:/usr/local/
scp -rp /usr/local/kafka/ root@192.168.8.30:/usr/local/

第二台zookeeper安装kafka:

cd /usr/local/kafka/config/
vim server.properties
broker.id=2
listeners=PLAINTEXT://192.168.8.20:9092


第三台zookeeper安装kafka:

cd /usr/local/kafka/config/
vim server.properties
broker.id=3
listeners=PLAINTEXT://192.168.8.30:9092


三台服务器启动kafka服务:

cd /usr/local/kafka/bin
./kafka-server-start.sh  ../config/server.properties   &

在第一台服务器发布消息:

cd /usr/local/kafka/bin
./kafka-console-producer.sh --broker-list 192.168.8.10:9092,192.168.8.20:9092,192.168.8.30:9092 --topic test


在第二台服务器订阅消息:

cd /usr/local/kafka/bin 
./kafka-console-consumer.sh --bootstrap-server 192.168.8.10:9092,192.168.8.20:9092,192.168.8.30:9092 --topic test --from-beginning
相关文章
|
2月前
|
消息中间件 存储 缓存
kafka(一)
kafka(一)
|
6月前
|
消息中间件 存储 分布式计算
|
3月前
|
消息中间件 Kafka
kafka里的acks是什么
【8月更文挑战第3天】kafka里的acks是什么
166 0
|
6月前
|
消息中间件 分布式计算 Java
|
6月前
|
消息中间件 Java Kafka
Kafka
Kafka
47 1
|
6月前
|
消息中间件 存储 分布式计算
kafka 详细介绍
kafka 详细介绍
|
6月前
|
消息中间件 存储 Java
玩转Kafka—初步使用
玩转Kafka—初步使用
50 0
|
消息中间件 缓存 算法
Kafka为什么这么快?
Kafka 是一个基于发布-订阅模式的消息系统,它可以在多个生产者和消费者之间传递大量的数据。Kafka 的一个显著特点是它的高吞吐率,即每秒可以处理百万级别的消息。那么 Kafka 是如何实现这样高得性能呢?本文将从七个方面来分析 Kafka 的速度优势。
76 1
|
消息中间件 开发框架 Java
113 Kafka介绍
113 Kafka介绍
74 0
|
消息中间件 缓存 Java
Kafka介绍
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。 Kafka是一种高吞吐量的分布式发布订阅消息系统,作为消息中间件来说都起到了系统间解耦、异步、削峰等作用,同时又提供了Kafka streaming插件包在应用端实现实时在线流处理,它可以收集并处理用户在网站中的所有动作流数据以及物联网设备的采样信息
166 0