kafka概述 与生产环境集群部署

概述

由于现有生产环境迁移到BClinux需要重新部署kafka集群,正好借此梳理一下kafka相关的知识点,以及部署流程。后续使用中的问题也会在文档后续记录

kafka诞生

  • 背景:kafka的诞生是来自于LinkedIn(领英)公司面临数据集成的问题,因为其使用的多个系统都有自己的数据表示和传输方式。
  • 解决的问题:为了解决实时数据流的处理问题,LinkedIn内部开发了Kafka。它的设计目标是提供一个高吞吐量、分布式、水平扩展和容错的系统。主要设计者包括Jay Kreps、Neha Narkhede和Jun Rao。
  • 开源: 2011年,Kafka被捐献给Apache软件基金会并开源,受到开发者社区的关注并被众多大企业采纳。Kafka从一个消息队列发展为一个包含流处理库的完整流处理平台,使其在流数据处理领域中占据了主导地位。
  • 商业版本: Confluent Platform ,Cloudera kafka , Hartonworks kafka

kafka 的特性

在kafka之前还使用ActiveMQ作为消息队列,ActiveMQ支持多种协议比如JMS、AMQP、MQTT等,不过ActiveMQ在吞吐量,延迟,持久性和可靠性上都不如kafka,下面是kafka的具体特性

  • 高吞吐量:Kafka能够迅速处理大量消息,每秒可以处理数百万条,适合大数据场景。
  • 可扩展性:随着业务的增长,Kafka允许你简单地添加更多的服务器到集群中,应对更大的负载。
  • 持久性和可靠性:消息在Kafka中是持久化的,即使多个broker节点失败,消息也不会丢失。Kafka利用分布式和副本机制来增加数据的持久性和可靠性。
  • 实时性:Kafka支持近实时的数据处理,使得消费者更快的获取数据。
  • 分布式:Kafka设计为分布式结构,这意味着它在多台服务器上运行,确保数据的高可用性。
  • 多消费者:多个应用或服务可以同时从Kafka的同一个topic读取数据,且互不干扰。
  • 持久化存储:Kafka将数据持久化到磁盘,即使系统产生大量数据,也能保持长时间的稳定性能。
  • 内建流处理:借助Kafka Streams 自身提供流数据处理功能,不依赖其他系统。
  • 强顺序保证:在Kafka的每个partition数据分区内,消息都是有序的。

kafka相关概念

Kafka 主要支持两种消息传递模型

  • 发布订阅模式 每个消费者都属于不同的消费者组,每个分区都可以被不同的消费者消费
  • 点对点模式 所有的消费者都在一个消费者组里面,这样每个分区每次都只能被一个消费者消费

消息传递语义

  • 最多一次:消息可能会丢失,永远不重复发送
  • 最少一次:消息不会丢失,但是可能会重复
  • 精确一次:保证消息被传递到服务端且在服务端不重复

topic主题

  • Kafka中的主题是一个消息流的分类。比如说可以创建一个叫做"成绩"的主题来保存成绩数据。
  • 主题在Kafka中是如何将消息进行分区和复制的关键。每个主题都可以被分割成多个分区,每个分区可以有多个副本。
  • 生产者发布消息到特定的主题,而消费者从主题中订阅并读取消息。

broker 消息代理

  • Kafka的服务节点被称为broker。
  • broker负责维护发布到系统的数据。每个broker可以保存数据并为客户端提供读写服务。
  • 在一个Kafka集群中,可能会有一个或多个brokers。让Kafka系统具有高容错性和高吞吐量。

partition分区

  • 分区是最小的并行单位
  • 个消费者可以消费多个分区,比如消费者1可以消费分区1和分区3
  • 一个分区可以被多个消费者组里的消费者消费但是,一个分区不能同时被同一个消费者里的多个消费者消费,比如同在一个消费者组1里面的,消费者1和消费者2不能消费同一个分区


    image.png
  • 生产者在往同一分区发送消息时候,先发送的offset比后发送的offset小,消费者消费时会先消费offset小的消息。消费者按照分区里的存放顺序进行消费,分区内的消息顺序读取,但是不通分区的顺序不能保证


    image.png
  • 如果要保证所有消息的顺序有两种方法

    • 可以设置一个分区但是会丢失扩展性和性能
    • 支持通过设置相同的key,相同的key的消息会发送给同一个分区

record 消息记录

  • 在Kafka中,消息是字节的数组,每个消息都被称为一个记录。
  • 每个记录都包含一个key和一个value,都是字节的数组。key是可设置的。
  • 记录还包含一个与之关联的时间戳。

kafka的基本原理

kafka 部署

  • 下载:下载的时候页面提醒3.5.1是stable稳定版,这里我们就使用3.5.1即可,下载Source download,也就是源码包。因为kafka官网并不提供rpm包,为了后续的集群部署和维护我通常选择将源码构建成rpm包,具体构建步骤在我其他的文档里有写

  • 网址:https://kafka.apache.org/downloads

    image.png

创建Kafka账户与kafka安装目录

在三台服务器(10.10.1.7、10.10.1.8、10.10.1.9)上执行以下操作:

sudo useradd kafka
sudo passwd kafka

mkdir /opt/kafka
chown -R kafka:kafka /opt/kafka

在每台服务器上安装Kafka rpm包

rpm -ivh /opt/kafka/kafka.rpm

kafka主要有以下几个目录

bin     #常用shell脚本  
config  #配置文件  
libs    #依赖包
logs    #日志
site-docs #文档

配置Kafka

  • 打开server.properties文件:
vim /etc/kafka/server.properties
更改以下事项

broker.id=0 #在每台服务器上设置不同的broker.id
port=9092
host.name=10.10.1.7  #新增,不同机器配置成自己ip
log.dirs=/opt/kafka-logs #日志位置自定义保证有权限就可
listeners=PLAINTEXT://10.10.1.7:9092  #监听器 指定本机的监听名称和端口
advertised.listeners=PLAINTEXT://10.10.1.7:9092 #对外发布的访问IP和端口,给客户端和zookeeper使用,如果存在内外网需要单独配置INTERNAL和EXTERNAL,这里不细讲了
zookeeper.connect=10.10.1.2:2181,10.10.1.3:2181,10.10.1.4:2181  #zookeeper集群地址

启动Kafka

在三台服务器上分别运行:

cd /opt/kafka/bin/
./kafka-server-start.sh ../config/server.properties #指定配置文件

验证Kafka部署

  • 创建一个测试Topic:
[dccp_alarm@xz-csywgzt-yyfwq-4 bin]$ ./kafka-topics.sh  --create --topic test --replication-factor 3 --partitions 3  --bootstrap-server 10.10.1.7:9092
Created topic test.

--replication-factor 3 ## 分区数量3
--partitions 3 ## 副本数量2
--zookeeper  ## zookeeper地址 配置文件写了 可以不指定
--bootstrap-server 10.10.1.7:9092 ##指定至少一个Kafka broker的地址和端口
  • 列出所有的Topic,确认你的Topic已创建:
./kafka-topics.sh --describe --topic test --bootstrap-server 10.10.1.7:9092

 --describe 查看状态
Topic: test     TopicId: mBvq8ul6QV68mtvDU5KpaA PartitionCount: 3       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: test     Partition: 0    Leader: 1       Replicas: 1,0,2 Isr: 1,0,2
        Topic: test     Partition: 1    Leader: 0       Replicas: 0,2,1 Isr: 0,2,1
        Topic: test     Partition: 2    Leader: 2       Replicas: 2,1,0 Isr: 2,1,0

# PartitionCount: 3  分区数量3
# ReplicationFactor: 3 副本数量是3
# Partition: 0  分区0 
# Leader: 1  leader是1 
# Replicas: 1,0,2  三个副本分别是1,0,2
#Isr: 1,0,2  Isr表示同步状态正常的副本

创建生产者给消费者发送消息测试

#创建生产者,出现 > 后发送消息
./kafka-console-producer.sh --broker-list 10.241.106.57:9092 --topic test   

#创建消费者 查看能否接受到消息 
./kafka-console-consumer.sh --bootstrap-server 10.241.106.57:9092 --topic test 
消费者端口可以正常接受消息即为正常

启动Kafka服务自动化

为了确保在服务器启动时Kafka自动运行,可以在每台服务器上运行:

sudo systemctl enable kafka
sudo systemctl start kafka

后续问题更新

。。。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容