kafka的12个重要概念

kafka的12个重要概念

  • 1、服务器broker
    • 1.1、Broker 的主要功能
    • 1.2、Kafka Broker 的架构
    • 1.3、配置和管理
    • 1.4、高可用性和负载均衡
    • 1.5、总结
  • 2、主题topic
    • 2.1、主要特点
  • 3、事件Event
  • 4、生产者producer
    • 4.1、主要功能
    • 4.2、Producer 的配置选项
    • 4.3、Producer 的工作流程
    • 4.4、总结
  • 5、消费者consumer
  • 6、消费组consumer group
  • 7、分区partiton
  • 8、偏移量offset
  • 9、Replica副本
    • 9.1、定义
    • 9.2、主副本与从副本
    • 9.3、 副本的工作机制
    • 9.4、副本的状态
    • 9.5、副本的容错与高可用性
    • 9.6、副本配置
    • 9.7、副本的管理
    • 9.8、总结
  • 10、ISR副本
  • 11、LEO(日志末端偏移量)
  • 12、HW(High Watermark)高水平值
  • 13、ISR副本、LEO(日志末端偏移量)、HW(High Watermark)高水平值三者之间的关系

1、服务器broker

Broker 是 Kafka 集群中的一个服务器,它负责接收、存储和转发消息。Kafka 集群由多个 broker 组成,这些 broker 通常分布在不同的物理或虚拟服务器上,以实现负载均衡和高可用性。

一个独立的 Kafka 服务器被称为 bro胎儿 broker 接收来自 生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。 broker 为消费者提供服务,对读取分区的请求作出响应,返
回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个 broker 可以轻松处理数千个分区以及每秒百万级的消息量。

1.1、Broker 的主要功能

1、消息存储: Broker 负责将生产者发送的消息存储到磁盘上,并在需要时将这些消息提供给消费者。消息被存储在 Kafka 中的称为 topic 的数据结构里,每个 topic 又可以分为多个 partition。

2、消息转发: Broker 接收生产者发送的消息,并将其写入对应的 topic 和 partition。当消费者订阅某个 topic 时,broker 会将该 topic 中的数据传送给消费者。

3、分区和副本管理: Kafka 的每个 topic 都可以分成多个分区,每个分区可以在不同的 broker 上存储。这有助于实现数据的分布和负载均衡。每个分区可以有多个副本,这些副本分布在不同的 broker 上,以确保数据的高可用性和容错性。Broker 负责管理这些分区及其副本的状态。

4、Leader 和 Follower: 每个分区都有一个 leader 和若干个 follower。leader 处理所有对分区的读写请求,而 follower 复制 leader 的数据以保证副本的一致性。Broker 还负责协调 leader 和 follower 的角色。

1.2、Kafka Broker 的架构

Producer: 生产者将消息发送到 Kafka 集群的某个 broker。
Broker: 处理和存储来自生产者的消息,并将它们分配到相应的 topic 和 partition。
Consumer: 消费者从 broker 订阅 topic,并读取存储在 topic 中的消息。

1.3、配置和管理

配置: 每个 Kafka broker 可以通过 server.properties 文件进行配置,主要配置项包括 broker ID、监听端口、日志目录、zookeeper 连接信息等。

管理: Kafka 提供了多种工具来管理 broker,例如 kafka-broker-api-versions.sh 可以查看 broker 的 API 版本,kafka-topics.sh 可以管理 topic 和 partition,kafka-consumer-groups.sh 可以查看消费者组的状态等。

1.4、高可用性和负载均衡

通过在 Kafka 集群中运行多个 broker,Kafka 可以实现数据的高可用性和负载均衡。数据的冗余存储和分布式架构保证了系统的可靠性和可扩展性,即使某些 broker 出现故障,数据和服务也不会中断。

1.5、总结

Kafka 的 broker 是集群中负责数据存储和转发的核心组件。它们处理来自生产者的消息,存储数据,协调数据的副本,提供给消费者,并确保系统的高可用性和负载均衡。通过合理配置和管理 broker,可以构建高效、可靠的消息系统。

2、主题topic

在 Kafka 中,topic 是一种用于分类和组织消息的机制。它是 Kafka 中数据存储和传输的基本单位。每个 topic 可以包含多个 partitions,每个 partition 是一个日志文件,按顺序存储消息。

2.1、主要特点

消息分类: Topic 用于将消息分类到不同的逻辑组,使生产者和消费者可以按需读取和写入数据。

分区: 每个 topic 可以分成多个 partition,这样可以实现并行处理和负载均衡。每个 partition 是有序的,消息在其中的顺序是保证的。

数据冗余: Topic 的每个 partition 可以有多个副本(replicas),分布在不同的 broker 上,这有助于数据的持久性和高可用性。

持久化: 消息在 topic 中按照配置的保留策略(如时间或大小)进行持久化。

消费模式: 消费者可以订阅一个或多个 topic,根据需求消费其中的数据。

总结来说,topic 在 Kafka 中是一个核心概念,负责组织和管理消息的存储与传输。

3、事件Event

在 Kafka 中,event 是指传输和存储的消息单位。每个 event 包含实际的数据内容,以及可能的元数据(如时间戳、键等)。这些 events 被写入到特定的 topic 中,并按顺序存储在分区(partition)里。消费者从 topic 中读取这些 events,进行处理和分析。总的来说,event 是 Kafka 中消息流的基本构建块。

4、生产者producer

在 Kafka 中,producer 是指负责将消息(或称为 events)发送到 Kafka 集群的组件。Producer 是 Kafka 的一个重要角色,它将数据发布到指定的 topic 中,然后 Kafka 的 broker 处理存储和转发这些数据。以下是关于 Kafka producer 的一些关键点:

4.1、主要功能

1、消息发送: Producer 负责将消息写入 Kafka 集群中的一个或多个 topic。消息可以是任何形式的数据,比如日志记录、事件数据等。

2、负载均衡: Producer 可以将消息发送到不同的分区(partitions)以实现负载均衡。通常,producer 会根据某种策略(如消息键、轮询等)来决定将消息写入哪个分区。

3、数据序列化: 在发送消息之前,producer 需要将数据序列化成 Kafka 可以存储的格式。Kafka 提供了多种序列化机制(如 JSON、Avro、Protobuf),也允许用户自定义序列化方式。

4、消息确认: Producer 可以配置不同的 acks(确认机制),来控制消息的可靠性。设置 acks=0 时,producer 不会等待 broker 的确认,设置 acks=1 时,producer 会等待 leader 的确认,而 acks=all(或 acks=-1)则要求所有副本都确认消息写入。

5、批量发送: 为了提高性能,producer 可以将多条消息打包成一个批次进行发送。这种批量发送可以减少网络往返次数,从而提高吞吐量。

6、重试机制: Producer 具备重试机制,当发送消息失败时,可以根据配置自动重试。重试策略可以帮助提高消息的成功率。

4.2、Producer 的配置选项

1、bootstrap.servers: 指定 Kafka 集群中 broker 的地址,producer 使用这些地址来连接到集群。

2、key.serializer 和 value.serializer: 用于将消息的键和值序列化为字节数组,以便 Kafka 存储和处理。

3、acks: 配置消息确认机制,决定 producer 等待多少 broker 确认消息写入。

4、batch.size: 配置批量发送的大小,决定 producer 在发送消息之前最大可以积累多少字节的数据。

5、linger.ms: 配置消息的延迟时间,决定 producer 在发送消息之前最多等待多少毫秒,以便打包更多的消息。

6、retry.backoff.ms: 配置当消息发送失败时,producer 等待的时间,以便进行重试。

4.3、Producer 的工作流程

初始化: Producer 初始化连接到 Kafka 集群,并确定要发送消息的 topic 和 partition。

序列化: 将消息的键和值序列化为字节数组。

发送消息: 将序列化后的消息发送到指定的 topic 和 partition。

确认和重试: 等待 broker 的确认,并根据配置进行重试(如有需要)。

处理响应: 根据 broker 返回的响应,处理发送结果和错误。

4.4、总结

Kafka 的 producer 是消息的生产者和发送者,负责将数据发布到 Kafka 集群中的 topic。通过配置和优化 producer 的各种参数,可以实现高效的数据发送和可靠性。

5、消费者consumer

Kafka 中的 consumer 是负责从 Kafka 集群中读取和处理消息的组件。它订阅一个或多个 topics,从这些 topics 中读取消息,并根据业务需求进行处理。消费者通常是应用程序的一部分,处理从 Kafka 传递过来的数据。主要特点包括:

1、订阅 Topics: 消费者订阅一个或多个 topics,以便从中获取消息。

2、分区读取: 消费者从分区中读取消息。一个 consumer group 内的消费者可以并行处理消息,每个消费者负责一个或多个分区。

3、偏移量管理: 消费者跟踪已处理消息的偏移量(offset),以便能够从正确的位置继续读取。这些偏移量可以存储在 Kafka 中或外部存储系统中。

4、消费策略: 消费者可以配置为实时消费(处理实时到达的消息)或批量消费(处理一定数量的消息后再进行处理)。

5、负载均衡: 在一个 consumer group 内,多消费者可以共享负载,确保消息的高效处理。

6、消息处理: 消费者应用逻辑处理从 Kafka 中读取的消息,如数据分析、存储或进一步的计算。

6、消费组consumer group

在 Kafka 中,消费组(consumer group) 是一组消费者实例的集合,它们共同处理一个或多个 topics 中的消息。每个消费组被分配独立的消息处理任务,以确保消息的负载均衡和可靠处理。主要特点包括:

1、负载均衡: 每个消费组内的消费者实例会共享处理 topic 中的分区,实现负载均衡。一个 topic 的每个分区只能被消费组中的一个消费者处理,但可以被多个消费组中的消费者处理。

2、消息偏移量: 消费组跟踪每个分区的消费进度(即消息的偏移量),以便在消费者重启或故障恢复时,从正确的位置继续消费。

3、容错性: 当消费组中的某个消费者实例失败时,其他实例可以接管未完成的任务,确保消息处理的可靠性和高可用性。

4、并行处理: 消费组内的多个消费者可以并行处理消息,提高整体处理吞吐量。

5、动态扩展: 可以动态增加或减少消费组中的消费者数量,Kafka 会自动重新分配分区以适应变化。

7、分区partiton

在 Kafka 中,分区(partition) 是 topic 的核心组成部分,是 Kafka 实现数据分布、负载均衡和扩展性的基础。以下是分区的主要概念和功能:

1. 数据分布
分区机制: 每个 topic 可以包含多个分区。分区是 Kafka 存储和管理数据的基本单位。数据在 topic 内部被分散到不同的分区中,以实现负载均衡和高吞吐量。

2. 消息顺序
顺序保证: 在同一个分区内,消息的顺序是有保证的。消费者从分区中读取消息时,会按照消息的写入顺序进行处理。但不同分区之间的消息顺序没有保证。

3. 负载均衡
生产者负载均衡: 生产者将消息发送到 topic 的不同分区,以实现负载均衡。可以根据消息键(key)来决定将消息发送到哪个分区,从而使相关的消息集中在同一个分区内。

消费者负载均衡: 消费者可以并行地从多个分区读取消息。一个 topic 的每个分区只能由一个消费者实例(在同一个消费组内)进行消费,但可以由不同的消费组中的消费者实例读取。

4. 扩展性
水平扩展: 通过增加分区数量,可以水平扩展 Kafka 的存储和处理能力。每个分区可以分布在不同的 broker 上,从而分担负载。

5. 数据复制
副本机制: 每个分区有一个领导副本(leader)和多个跟随副本(follower)。领导副本负责处理所有的读写请求,跟随副本复制领导副本的数据,以实现数据的冗余备份和高可用性。

6. 消息偏移量
偏移量管理: 每个分区内的消息都有一个唯一的偏移量(offset),消费者使用这些偏移量来跟踪已经消费的消息,确保消息的处理不会遗漏或重复。

7. 数据持久化
日志文件: 每个分区的数据会被存储为一组日志文件,这些文件在磁盘上按顺序追加写入。Kafka 的分区机制帮助实现高效的数据存储和读取。

总结
Kafka 的分区机制是其高性能和高可扩展性的关键。通过将数据分散到多个分区,Kafka 能够处理大规模的数据流,并确保高吞吐量和容错能力。分区的设计使得 Kafka 能够有效地支持大规模的数据处理和分布式系统架构。

8、偏移量offset

在 Apache Kafka 中,偏移量(offset) 是一个关键概念,用于标识和跟踪消息在分区中的位置。以下是关于偏移量的详细解释:

1. 定义
偏移量: 偏移量是一个整数,表示消息在 Kafka 分区中的位置。每条消息在一个分区内都有一个唯一的、递增的偏移量。它是消息在分区内的序号,从零开始递增。

2. 作用
消息定位: 消费者使用偏移量来确定从哪里开始读取消息。例如,消费者可以从某个特定的偏移量开始读取,或者从最后提交的偏移量继续读取。

消息跟踪: 偏移量帮助 Kafka 跟踪消息的消费进度。它使消费者能够在重启后继续从上次处理的位置开始消费,避免重复处理消息或丢失消息。

3. 如何工作
生产者: 生产者将消息发送到一个分区,Kafka 自动为每条消息分配一个偏移量。生产者无需关注偏移量的分配,这个过程是由 Kafka 管理的。

消费者: 消费者从分区中读取消息时,会记住每条消息的偏移量。消费者可以通过提交偏移量(通常是指明已经处理到哪个偏移量)来表示消息处理的进度。

4. 偏移量提交
自动提交: Kafka 支持自动提交偏移量的功能,消费者可以设置自动提交间隔,Kafka 会自动记录消费者处理的最新偏移量。

手动提交: 也可以选择手动提交偏移量,消费者在确认处理完成后显式地提交当前的偏移量。这允许更精细的控制,例如在处理消息失败时可以回滚到之前的偏移量。

5. 存储
消费者偏移量存储: Kafka 将消费者的偏移量信息存储在一个名为 __consumer_offsets 的内部 topic 中。这个 topic 用于存储所有消费者组的偏移量信息,以便在重启或故障恢复时可以恢复消费状态。

6. 数据恢复
高可用性: 如果消费者崩溃或出现故障,Kafka 可以通过存储在 __consumer_offsets topic 中的偏移量信息恢复消费者的进度。消费者可以从最后提交的偏移量处继续处理消息,保证数据不会丢失。

7. 性能考虑
偏移量与存储: 虽然偏移量本身是轻量级的,但在高吞吐量的系统中,频繁的提交操作(尤其是在自动提交模式下)可能会对性能产生影响。因此,在高吞吐量场景下,合理配置提交间隔和手动提交策略是很重要的。

总结
偏移量是 Kafka 中用于标识消息在分区中的位置的关键机制。它确保了消息的有序消费,并提供了消费者进度跟踪和恢复的能力。通过管理偏移量,Kafka 实现了可靠的消息传递和高效的数据处理。

9、Replica副本

在 Apache Kafka 中,副本(Replica) 是一个重要的概念,用于实现数据的高可用性和容错性。以下是关于 Kafka 中副本的详细解释:

9.1、定义

副本(Replica): 副本是 Kafka 分区的一个完整拷贝,用于保证数据的持久性和容错能力。每个分区可以有多个副本,每个副本都保存该分区的完整数据。

9.2、主副本与从副本

主副本(Leader Replica): 在每个分区中,只有一个副本被选为主副本。主副本负责处理所有的读写请求。所有的生产者和消费者与主副本交互,读写操作都由主副本处理。

从副本(Follower Replica): 其余的副本都是从副本。它们从主副本同步数据,但不直接处理客户端的读写请求。主要任务是从主副本中获取最新的数据并保持同步,以便在主副本失败时可以接管。

9.3、 副本的工作机制

数据复制: 当生产者将消息发送到 Kafka 分区时,这些消息首先被写入到主副本。主副本将这些消息复制到所有的从副本,以保证数据的一致性和可用性。

同步与异步复制: 从副本的复制可以是同步的,也可以是异步的。同步复制意味着主副本在消息被所有从副本确认写入后才认为写入成功;异步复制则意味着主副本在消息被写入后立即返回成功,而从副本会在稍后时间同步数据。

9.4、副本的状态

ISR(In-Sync Replicas): ISR 是指当前与主副本保持同步的副本集合。只有在 ISR 中的副本才被认为是完全同步的,这些副本可以在主副本失败时迅速接管。

Non-ISR 副本: 这些副本未能及时跟上主副本的数据更新,可能因为网络延迟或其他问题。在主副本故障时,这些非 ISR 副本不能立即接管。

9.5、副本的容错与高可用性

主副本故障转移: 如果主副本发生故障,Kafka 会选择一个 ISR 中的从副本作为新的主副本,以保证数据的持续可用性。选举新主副本的过程是自动的。

副本的恢复: 当故障的主副本恢复后,它会成为一个从副本,重新加入到分区的副本集合中,并从新的主副本同步数据。

9.6、副本配置

副本数(Replication Factor): Kafka 分区的副本数是一个配置项,通常在创建 topic 时指定。副本数决定了每个分区有多少个副本,影响到数据的持久性和容错能力。副本数越多,系统的容错能力越强,但也会增加存储和网络负担。

9.7、副本的管理

副本分配: Kafka 使用分区的副本分配策略来分配主副本和从副本。这些策略旨在优化负载均衡和故障恢复能力,确保副本在集群中的分布合理。

副本的监控与管理: Kafka 提供了监控工具和管理接口,以帮助运维人员跟踪副本的状态,处理副本同步问题,并进行故障恢复。

9.8、总结

在 Kafka 中,副本机制是确保数据高可用性和容错性的核心部分。通过主副本和从副本的设计,Kafka 能够在分区级别实现数据冗余,保证即使出现节点故障,系统也能继续正常运行。这种机制增强了 Kafka 的可靠性和数据持久性,适合用于大规模的数据流处理和实时数据传输场景。

10、ISR副本

在这里插入图片描述
在这里插入图片描述

11、LEO(日志末端偏移量)

表示下一条消息该写入的位置

在这里插入图片描述

12、HW(High Watermark)高水平值

在这里插入图片描述

13、ISR副本、LEO(日志末端偏移量)、HW(High Watermark)高水平值三者之间的关系

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在不增加太多时间和精力的情况下,提高OZON电商店铺的运营效果

以下是一些在不增加过多时间精力的情况下提高 OZON 电商店铺运营效果的要点: 一、优化产品信息 • 关键词优化:利用 15-30 分钟时间,每周进行一次关键词研究,找到与产品相关且搜索量大的关键词,将其巧妙地融入到产品标…

3、LVGL控件-开关、复选框、进度条

本篇文章目录导航 ♠♠ LVGL控件-开关、复选框、进度条 ♣♣♣♣ 一、LVGL开关部件 ♦♦♦♦♦♦♦♦ 1.1 开关部件组成部分 ♦♦♦♦♦♦♦♦ 1.2 开关部件基本API ♦♦♦♦♦♦♦♦ 1.3 实验小演示 ♣♣♣♣ 二、LVGL复选框部件 ♦♦♦♦♦♦♦♦ 2.1 复选框部件组成部分 ♦…

立体库技术协议:完整版

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是一份关于自动化立体库技术协议的详细文档,包括了总体设计方案、…

C语言中的运算符

一,算数运算符 基本算术运算符: 加法():用于两个数相加。例如 int a 3 5;,结果 a 的值为 8。 减法(-):两个数相减。如 int b 7 - 4;,b 的值为 3。 乘法(*…

【动图效果概览】自动化建链后,Exata调用STK更新卫星位置

如下图所示,动画遵循 时间前进方向,划分截取为5段 (因为每张照片限制大小5MB,不够应该够看清个大概意思了):

黑神话悟空用什么编程语言

《黑神话:悟空》作为一款备受瞩目的国产单机动作游戏,其背后的开发涉及了多种编程语言和技术。根据公开信息和游戏开发行业的普遍做法,可以推测该游戏主要使用了以下几种编程语言: C: 核心编程语言:作为《黑…

经验笔记:Hadoop

Hadoop经验笔记 一、Hadoop概述 Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。其设计目的是为了在商用硬件上运行,具备高容错性和可扩展性。Hadoop的核心是Hadoop Distributed File System (HDFS) 和YARN (Yet Another Resource Negot…

基于jstack、jmap、jstat 进行JVM监控

文章目录 引言I jmap 内存映像工具格式内存分配情况查看内存的对象II manager webapp/manager/status 查看服务器状态manager/jmxproxy 查询Tomcat指标III jps 查看本机的Java中进程信息语法格式如下只显示JVM的进程id输出传入main方法的参数输出main类或Jar的全限名输出传入JV…

【计算机网络】计算机网络的分层结构

为什么要分层?为什么要制定协议? 计算机网络功能复杂→采用分层结构,将诸多功能合理地划分在不同层次→对等层之间制定协议,以实现功能。

LabVIEW性能优化方法

在LabVIEW开发中,性能优化至关重要。合理的内存管理、并行处理、多线程优化、以及界面和代码的精简能够大幅提高程序效率,降低系统资源占用。下面将探讨LabVIEW性能优化的各个方面,提供实用技巧和建议,帮助开发者提升项目的执行速…

python并发与并行(一) ———— 用subprocess管理子进程

并发(concurrency)指计算机似乎能在同一时刻做许多件不同的事情。例如,在只配有一个CPU核心的计算机上面,操作系统可以迅速切换这个处理器所运行的程序,因此尽管同一时刻最多只有一个程序在运行,但这些程序…

Node.js原生开发脚手架工具(下)

前言 在现代软件开发中,脚手架工具成为提高开发效率和一致性的关键利器。使用Node.js原生开发自己的脚手架工具不仅能帮助自动化常见任务,还能根据具体需求进行高度定制。Node.js的异步非阻塞特性和丰富的模块系统使其成为构建这种工具的理想选择。本篇文…

今日算法:蓝桥杯基础题之“门牌制作”

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注!个人知乎 今日算法第二题,如何制作门牌号,一起看看吧。 问题描述 小蓝要为一条街的住户制作门牌号。这条街一共有 2024 位住户,门牌号从 1 到 2024 编号。…

12.torchvision中的数据集使用

torchvision中的数据集使用 需要学习知识: 如何把数据集(多张图片)和 transforms 结合在一起。 标准数据集如何下载、查看、使用。 进入pytorch官网,可以看到pytorch文档里分了不同的块,如下图,标出了常…

如何本地搭建Whisper语音识别模型

Whisper是OpenAI推出的一款强大的语音识别模型,具备多种语言的识别能力。尽管基于云的语音识别服务方便,但有些项目和需求需要在本地环境运行,以确保数据隐私和降低延迟。以下是如何在本地搭建Whisper语音识别模型的详细指南。 环境准备 1. 硬件要求: - 计算能力:建议…

《机器学习》—— K-means 聚类算法

文章目录 一、什么是K-means 聚类算法?二、聚类效果评价方式——轮廓系数三、示例:代码实现四、聚类算法的优缺点 一、什么是K-means 聚类算法? K-Means 是 Python 中非常流行的一个聚类算法,它属于无监督学习算法的一种。在 sci…

Kubernetes高级调度 Initcontainer、Ephemeral containers和HPA

在前面的章节,已经学习过 Kubernetes 的调度基础,实现了将自己的服务部署到Kubernetes,但是在生产环境中,调度远远比自己想象的要复杂。 比如: 某些程序只能部署在固定的几台机器上。某些机器只能部署指定的 Pod。节点挂…

使用ffmpeg+node-media-server实现从rtsp服务器拉流再推送至rtmp服务器,实现http+flv进行web播放

最近由于项目的需要,需要从海康的摄像头中读取视频流然后在web页面上展示。 由于海康摄像头使用了rtsp协议提供视频拉流服务,而web页面目前使用的插件不支持直接播放rtsp协议的视频流;因此考虑使用ffmpeg从rtsp中拉流,再推流至rtm…

PDF招生简章如何转二维码?

​随着科技的不断发展,招生报名方式也在不断创新。如今,许多学校和企业都采用PDF招生简章来宣传招生。然而,传统的纸质招生简章存在携带不便、易损坏等问题。为了解决这些问题,将PDF招生简章转换为二维码成为了一种趋势。那你知道…

随身携带的android TV盒子以及tvbox-fongmi版的安装

https://www.everythingkodibuilds.com/p/install-android-tv-on-usb.html 现在大家都有笔记本,只要一个U盘,笔记本就能变身android电视盒子,这样也不错.这个文章就是介绍了这样的思路和实现的方法. 如果手里有x86的小型机,还能直接放在家里. 下面进入正题,先说上文中的流程和要…