【kafka】概念-脚本命令使用

本文详细介绍了Kafka的基本概念,包括角色(broker、producer、consumer、topic和partition)、核心概念(如AR、ISR、OSR、HW和LEO)以及Kafka的优势和使用场景。此外,还讲解了如何使用Kafka的脚本命令进行topic管理和消息的生产消费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kafka

角色

broker

⽣产者创建消息。
该⻆⾊将消息发布到Kafka的topic中。broker接收到⽣产者发送的消息后,broker将该消息追加到当前⽤于追加
数据的 segment ⽂件中。

topic

每条发布到Kafka集群的消息都有⼀个类别,这个类别被称为Topic。
物理上不同Topic的消息分开存储。
主题就好⽐数据库的表,尤其是分库分表之后的逻辑表。

partition

  1. 主题可以被分为若⼲个分区,⼀个分区就是⼀个提交⽇志。
  2. 消息以追加的⽅式写⼊分区,然后以先⼊先出的顺序读取。
  3. ⽆法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。
  4. Kafka 通过分区来实现数据冗余和伸缩性。
  5. 在需要严格保证消息的消费顺序的场景下,需要将partition数⽬设为1。

首领和副本

首领副本负责处理消息的读写请求
同步副本只负责消息的同步(和leader副本)

offset偏移量

生产者消费者读取消息的位置

kafka优势

  1. ⾼吞吐量:单机每秒处理⼏⼗上百万的消息量。即使存储了许多TB的消息,它也保持稳定的性能。
  2. ⾼性能:单节点⽀持上千个客户端,并保证零停机和零数据丢失。
  3. 持久化数据存储:将消息持久化到磁盘。通过将数据持久化到硬盘以及replication防⽌数据丢失。
  4. 零拷⻉
  5. 顺序读,顺序写
  6. 利⽤Linux的⻚缓存
  7. 分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都会有多个,均为分布式的。⽆需停机
    即可扩展机器。多个Producer、Consumer可能是不同的应⽤。
  8. 可靠性 - Kafka是分布式,分区,复制和容错的。
  9. 客户端状态维护:消息被处理的状态是在Consumer端维护,⽽不是由server端维护。当失败时能⾃动平
    衡。
  10. ⽀持online和offline的场景。
  11. ⽀持多种客户端语⾔。Kafka⽀持Java、.NET、PHP、Python等多种语⾔。

使用场景

  • ⽇志收集:⼀个公司可以⽤Kafka可以收集各种服务的Log,通过Kafka以统⼀接⼝服务的⽅式开放给各种Consumer;
  • 消息系统:解耦⽣产者和消费者、缓存消息等;
  • ⽤户活动跟踪:Kafka经常被⽤来记录Web⽤户或者App⽤户的各种活动,如浏览⽹⻚、搜索、点击等活动,这些
    活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的监控分析,亦可保存到数据
    库;
  • 运营指标:Kafka也经常⽤来记录运营监控数据。包括收集各种分布式应⽤的数据,⽣产各种操作的集中反馈,⽐
    如报警和报告;
  • 流式处理:⽐如Spark Streaming和Storm。

核心概念

在这里插入图片描述

缩写解释

AR

分区中的所有副本统称为AR(Assigned Repllicas)。
AR=ISR+OSR

ISR

所有与leader副本保持⼀定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中
的⼀个⼦集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进⾏同步,同步期间内
follower副本相对于leader副本⽽⾔会有⼀定程度的滞后。前⾯所说的“⼀定程度”是指可以忍受的滞后范围,这个范围
可以通过参数进⾏配置。

OSR

与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas)。在正常情况下,所有
的follower副本都应该与leader副本保持⼀定程度的同步,即AR=ISR,OSR集合为空。

HW

HW是High Watermak的缩写, 俗称⾼⽔位,它表示了⼀个特定消息的偏移量(offset),消费之只能拉取到这
个offset之前的消息。

LEO

LEO是Log End Offset的缩写,它表示了当前⽇志⽂件中下⼀条待写⼊消息的offset。
在这里插入图片描述

脚本命令

# 以守护进程的方式启动kafka
[root@VM-20-16-centos bin]# kafka-server-start.sh -daemon ../config/server.properties 

# 没有-daemon会直接在终端打印kafka启动状况
kafka-server-start.sh ../config/server.properties 

# 日志的存放路径
[root@VM-20-16-centos logs]# pwd
/opt/kafka_2.12-1.0.2/logs

可以通过查看日志查看kafka的启动是否成功

topic命令使用

# 查看有哪些topic
[root@VM-20-16-centos bin]# kafka-topics.sh --zookeeper localhost:2181/myKafka  --list

# 创建topic  topic-hello  其中有四个分区
# 创建主题的时候需要指定当前主题有多少分区,每个分区有多少个副本
# 分区是为了横向扩展
# 副本是为了提供高可用,所以所以副本需要配置在集群的不同broker机器上,因为当前只有一台broker,那此时--replication-factor副本因子只能写成1
[root@VM-20-16-centos bin]# kafka-topics.sh --zookeeper localhost:2181/myKafka --create --topic topic-hello --partitions 4 --replication-factor 1
Created topic "topic-hello".

# 查看topic详情
# PartitionCount 4个分区,从0开始
# Leader 首领副本在broker-id为0的服务器上
# Replicas 副本在broker-id为0的服务器上
# Isr 同步副本在0号broker-id上
[root@VM-20-16-centos bin]# kafka-topics.sh --zookeeper localhost:2181/myKafka --describe --topic topic-hello 
Topic:topic-hello       PartitionCount:4        ReplicationFactor:1     Configs:
        Topic: topic-hello      Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: topic-hello      Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: topic-hello      Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: topic-hello      Partition: 3    Leader: 0       Replicas: 0     Isr: 0


# 执行topic的删除操作
# 但是看结果这条命令不执行删除动作,仅仅是在zookeeper上标记该topic要被删除而已,同时需要要提前打开delete.topic.enable开关,否则删除动作是不会执行的。配置属性在/opt/kafka_2.12-1.0.2/config/server.properties中配置
[root@VM-20-16-centos bin]# kafka-topics.sh --zookeeper localhost:2181/myKafka --delete --topic topic-hello 
Topic topic-hello is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

生产消费消息

# 生产topic_1的消息
[root@VM-20-16-centos bin]# kafka-console-producer.sh --topic topic_1 --broker-list 81.70.5.240:9092
>1
>as

# 消费消息
# 加上--from-beginning表示从头开始消费
[root@VM-20-16-centos bin]# kafka-console-consumer.sh --bootstrap-server 81.70.5.240:9092 --topic topic_1
as
asad



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值