Kafka 学习笔记(一)
Kafka 是什么
Kafka 最初是 LinkedIn 的内部项目,现在已经捐赠给 Apache 基金会。Kafka 是一个高性能分布式基于发布/订阅的消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务。
为什么要使用消息队列
当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列”是在消息的传输过程中保存消息的容器。
使用消息队列的好处
提升响应速度
使用了消息队列,生产者一方,把消息往队列里一扔,就可以立马返回,响应用户了。无需等待处理结果。处理结果可以让用户稍后自己来取,如医院取化验单。也可以让生产者订阅(如:留下手机号码或让生产者实现listener接口、加入监听队列),有结果了通知。获得约定将结果放在某处,无需通知。
提升稳定性
考虑电商系统下订单,发送数据给生产系统的情况。电商系统和生产系统之间的网络有可能掉线,生产系统可能会因维护等原因暂停服务。如果不使用消息队列,电商系统数据发布出去,顾客无法下单,影响业务开展。两个系统间不应该如此紧密耦合。应该通过消息队列解耦。同时让系统更健壮、稳定。
消减服务耦合
传统的设计中一个服务的调用可能会涉及到多个下游的调用。直接造成一个服务和多个下游服务耦合,且多个下游调用将拖慢服务的运行速度。当使用了消息队列,我们的服务只关系消息是否发送成功,对于一条消息会被谁消费服务不在关心。直接消除了服务的间的耦合度,只与消息队列产生耦合。
Kafka 的入门案例
安装运行环境
安装zookeeper
因为Kafka是使用的zookeeper作为Kafka集群的注册中心,所以我们先要在自己的本机上部署zookeeper的实例。zookeeper使用的Java进行编写,所以我们的部署机器上还要有Java的运行环境
zookeeper下载地址: https://zookeeper.apache.org/releases.html
单机模式为例:
解压下载好的压缩包,进入到zookeeper的conf目录,将其中的zoo_sample.cfg重新命名为zoo.cfg
修改zoo.cfg的配置:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/Users/vector/codeTools/zookeeper-3.6.2/data