Kafka特性之分区
副本机制
Kafka在⼀定数量的服务器上对主题分区进⾏复制。
当集群中的⼀个broker宕机后系统可以⾃动故障转移到其他可⽤的副本上,不会造成数据丢失。
–replication-factor 3 1leader+2follower
将复制因⼦为1的未复制主题称为复制主题。
主题的分区是复制的最⼩单元。
在⾮故障情况下,Kafka中的每个分区都有⼀个Leader副本和零个或多个Follower副本。
包括Leader副本在内的副本总数构成复制因⼦。
所有读取和写⼊都由Leader副本负责。
通常,分区⽐broker多,并且Leader分区在broker之间平 ...
Kafka特性之主题
管理
使⽤kafka-topics.sh脚本:
选项
说明
–config <String: name=value>
为创建的或修改的主题指定配置信息。⽀持下述配置条⽬如下方详细列表
–create
创建⼀个新主题
–delete
删除⼀个主题
–delete-config <String: name>
删除现有主题的⼀个主题配置条⽬。这些条⽬就是在 --config 中给出的配置条⽬。
–alter
更改主题的分区数量,副本分配和/或配置条⽬。
–describe
列出给定主题的细节。
–disable-rack-aware
禁⽤ ...
Kafka特性之消费者
概念
消费者和消费组
消费者从订阅的主题消费消息,消费消息的偏移量保存在Kafka的名字是 __consumer_offsets 的主题中。
消费者还可以将⾃⼰的偏移量存储到Zookeeper,需要设置offset.storage=zookeeper。
推荐使⽤Kafka存储消费者的偏移量。因为Zookeeper不适合⾼并发。
多个从同⼀个主题消费的消费者可以加⼊到⼀个消费组中。
消费组中的消费者共享group_id。
group_id通过消费者的配置指定:configs.put(“group.id”, “xxx”);
group_id⼀般设置为应⽤的逻辑名称。⽐如多个订单处理程序组成⼀个消费 ...
Kafka特性之⽣产者
消息发送
数据⽣产流程解析
Producer创建时,会创建⼀个Sender线程并设置为守护线程。
⽣产消息时,内部其实是异步流程;⽣产的消息先经过拦截器->序列化器->分区器,然后将消息缓存在缓冲区(该缓冲区也是在Producer创建时创建)。
批次发送的条件为:缓冲区数据⼤⼩达到batch.size或者linger.ms达到上限,哪个先达到就算哪个。
批次发送后,发往指定分区,然后落盘到broker;如果⽣产者配置了retrires参数⼤于0并且失败原因允许重试,那么客户端内部会对该消息进⾏重试。
落盘到broker成功,返回⽣产元数据给⽣产者。
...
Kafka服务端参数配置
配置参数
$KAFKA_HOME/config/server.properties⽂件中的配置参数。
zookeeper.connect
该参数⽤于配置Kafka要连接的Zookeeper/集群的地址。
它的值是⼀个字符串,使⽤逗号分隔Zookeeper的多个地址。Zookeeper的单个地址是 host:port 形式的,可以在最后添加Kafka在Zookeeper中的根节点路径。如:
1zookeeper.connect=node2:2181,node3:2181,node4:2181/myKafka
内外⽹隔离配置
listeners
⽤于指定当前Broker ...
Kafka开发实战
消息的发送与接收
⽣产者主要的对象有: KafkaProducer , ProducerRecord 。
其中 KafkaProducer 是⽤于发送消息的类, ProducerRecord 类⽤于封装Kafka的消息。
KafkaProducer 的创建需要指定的参数和含义:
参数
说明
bootstrap.servers
配置⽣产者如何与broker建⽴连接。该参数设置的是初始化参数。如果⽣产者需要连接的是Kafka集群,则这⾥配置集群中⼏个broker的地址,⽽不是全部,当⽣产者连接上此处指定的broker之后,在通过该连接发现集群中的其他节点。
key.s ...
Kafka安装与配置
Java环境为前提
上传jdk-8u261-linux-x64.rpm到服务器并安装:
1rpm -ivh jdk-8u261-linux-x64.rpm
配置环境变量并⽣效
12345678910vim /etc/profile#JAVA_HOMEexport JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231export PATH=$PATH:$JAVA_HOME/bin# ⽣效source /etc/profile# 验证java -version
Zookeeper的安装配置
上传zookeeper-3.4.14.tar.gz到 ...
Kafka概念和基本架构
Kafka介绍
Kafka是最初由Linkedin公司开发,是⼀个分布式、分区的、多副本的、多⽣产者、多订阅者,基于zookeeper协调的分布式⽇志系统(也可以当做MQ系统),常⻅可以⽤于web/nginx⽇志、访问⽇志,消息服务等等,Linkedin于2010年贡献给了Apache基⾦会并成为顶级开源项⽬。
主要应⽤场景是:⽇志收集系统和消息系统。
Kafka主要设计⽬标如下:
以时间复杂度为O(1)的⽅式提供消息持久化能⼒,即使对TB级以上数据也能保证常数时间的访问性能。
⾼吞吐率。即使在⾮常廉价的商⽤机器上也能做到单机⽀持每秒100K条消息的传输。
⽀持Kafka Se ...
Redis高可用集群与分区
分区是将数据分布在多个Redis实例(Redis主机)上,以至于每个实例只包含一部分数据。
分区的意义
性能的提升
单机Redis的网络I/O能力和计算资源是有限的,将请求分散到多台机器,充分利用多台机器的计算能力可网络带宽,有助于提高Redis总体的服务能力。
存储能力的横向扩展
即使Redis的服务能力能够满足应用需求,但是随着存储数据的增加,单台机器受限于机器本身的存储容量,将数据分散到多台机器上存储使得Redis服务可以横向扩展。
分区的方式
根据分区键(id)进行分区
范围分区
根据id数字的范围比如1–10000、100001–20000…90001-100000,每个 ...
Redis高可用哨兵模式
哨兵(sentinel)是Redis的高可用性(High Availability)的解决方案:
由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。
当主服务器进入下线状态时,sentinel可以将该主服务器下的某一从服务器升级为主服务器继续提供服务,从而保证redis的高可用性。
部署方案
搭建配置
在一台机器上采用伪分布式的方式部署。(生产环境应该是多台机器)
根据上面的部署方案搭建如下:
Redis-Master :127.0.0.1 6379
123456789101112131415161718192021222324m ...