目录
(4)创建节点id文件(按server编号设置这个id,三个机器不同)
(3)在所有kafka节点上执行开启命令,生成kafka群集(三个节点的配置相同)
消息队列
1:什么是消息队列
消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到中而不用管谁来取,消息使用者只管从中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
2:消息队列的特征
- (1)存储
- 与依赖于使用套接字的基本TCP和UDP协议的传统请求和响应系统不同,消息队列通常将消息存储在某种类型的缓冲区中,直到目标进程读取这些消息或将其从消息队列中显式移除为止。
- (2)异步
- 与请求和响应系统不同,消息队列通过缓冲消息可以在应用程序中公开一定程度的异步性,允许源进程发送消息并在队列中累积消息,而目标进程则可以挑选消息进行处理。这样,应用程序就可以在某些故障情况下运行,例如连接断断续续或源进程或目标进程故障。
路由:消息队列还可以提供路由功能,其中多个进程可以在同一队列中读取或写入消息,从而实现广播或单播通信模式。
3:为什么需要消息队列
- (1)解耦
- 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
- (2)冗余
- 消息队列把数据进行持久化直到它们己经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的'插入一获取一删除'范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息己经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。
- (3)扩展性
- 因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。
- (4)灵活性&峰值处理能力
- 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
- (5)可恢复性
- 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
- (6)顺序保证:
- 在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。(Kafka保证一个Partition内的消息的有序性)
- (7)缓冲
- 有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
- (8)异步通信
- 很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
Kafka基础与入门
1:kafka基本概念
Kafka是一种高吞吐量的分布式发布/订阅消息系统,这是官方对kafka的定义,这样说起来,可能不太好理解,这里简单举个例子:现在是个大数据时代,各种商业、社交、搜索、浏览都会产生大量的数据。那么如何快速收集这些数据,如何实时的分析这些数据,是一个必须要解决的问题,同时,这也形成了一个业务需求模型,即生产者生产(produce)各种数据,消费者(consume) 消费(分析、处理)这些数据。那么面对这些需求,如何高效、稳定的完成数据的生产和消费呢?这就需要在生产者与消费者之间,建立一个通信的桥梁,这个桥梁就是消息系统。从微观层面来说,这种业务需求也可理解为不同的系统之间如何传递消息。
kafka是Apache组织下的一个开源系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop平台的数据分析、低时延的实时系统、storm/spark流式处理引擎等。kafka现在己被多家大型公司作为多种类型的数据管道和消息系统使用。
2:kafka角色术语
kafka的一些核心概念和角色
- (1)Broker:Kafka集群包含一个或多个服务器,每个服务器被称为broker(经纪人)。
- (2)Topic:每条发布到Kafka集群的消息都有一个分类,这个类别被称为Topic(主题)。
- (3)producer:指消息的生产者,负责发布消息到kafka brokero
- (4)consumer:指消息的消费者,从kafka broker拉取数据,并消费这些己发布的消息。
- (5)partition:partition是物理上的概念,每个Topic包含一个或多个partition,每个 partition都是一个有序的队列。partition中的每条消息都会被分配一个有序的id (offset)
- (6)consumer Group:消费者组,可以给每个consumer指定消费组,若不指定消费者组,则属于默认的groupo
- (7)Message: 消息,通信的基本单位,每个producer可以向一个topic发布一些消息。
3:kafka拓扑架构
一个典型的Kafka集群包含若干producer,若干broker、若干Consumer Group,以及一个 Zookeeper集群。典型架构如下图所示:
从图中可以看出,典型的消息系统有生产者(producer),存储系统(broker)和消费者 (consumer)组成,Kafka作为分布式的消息系统支持多个生产者和多个消费者,生产者可以将消息分布到集群中不同节点的不同Partition上,消费者也可以消费集群中多个节点上的多个 Partitiono在写消息时允许多个生产者写到同一个Partition中,但是读消息时一个Partition 只允许被一个消费组中的一个消费者所消费,而一个消费者可以消费多个Partitiono也就是说同一个消费组下消