Что такое Кафка
Kafka
это распределенная потоковая платформа с тремя ключевыми возможностями
- Подписаться на выпуск записей потока, который похож на предприятие
消息队列
или企业消息传递系统
- Храните потоки записей отказоустойчивым способом
- Запись в прямом эфире
Приложения Кафки
- как система сообщений
- как система хранения
- Поточный процессор
KAFKA может создать потоковые трубопроводы для передачи данных, чтобы надежно получить данные между системами или приложениями.
Создавайте потоковые приложения для передачи данных и ответа на них.
Kafka как система обмена сообщениями
Kafka как система обмена сообщениями состоит из трех основных компонентов.
- Производитель: клиент, который публикует сообщение.
- Брокер: клиент, который принимает и хранит сообщения от производителей
- Потребитель: Потребители читают сообщение от Брокера.
В большой системе вам нужно будет взаимодействовать со многими подсистемами, а также сообщением, а в таких системах вы найдете исходную систему (отправитель сообщения) и систему назначения (приемник сообщения). Для передачи данных в такой системе обмена сообщениями вам необходимо иметь правильные данные
Такое взаимодействие с данными выглядит беспорядочно, если мы используем систему обмена сообщениями, то система становится намного проще и чище.
- Kafka работает как кластер на серверах в одном или нескольких центрах обработки данных.
- Каталог, в котором кластер Kafka хранит записи сообщений, называется
topics
- Каждая запись сообщения содержит три элемента:Ключ, значение, метка времени
Основной API
Kafka имеет четыре основных API, они
- API производителя, который позволяет приложениям отправлять записи сообщений в одну или несколько тем.
- Consumer API, который позволяет приложениям подписываться на одну или несколько тем и обрабатывать поток созданных для них записей.
- Streams API, который позволяет приложению действовать как потоковый процессор, потреблять входные потоки из одной или нескольких тем и генерировать для них выходные потоки, эффективно преобразовывая входные потоки в выходные потоки.
- Connector API, который позволяет создавать и запускать доступных производителей и потребителей, которые подключают темы Kafka к существующим приложениям или системам данных. Например, коннектор к реляционной базе данных может фиксировать все изменения в таблице.
Основные понятия Кафки
В качестве высокомасштабируемой и неисправной системы обмена сообщениями KAFKA имеет много основных концепций. Давайте посмотрим на эти концепции кафка.
topic
Тема называется темой, В kafka атрибут категории используется для разделения класса, к которому принадлежит сообщение, а класс, который разделяет сообщение, называется темой. Тема эквивалентна метке назначения сообщения и является логическим понятием. Темы подобны таблицам в базе данных или папкам в файловой системе.
partition
Раздел переводится в разделы.Сообщения в теме делятся на один или несколько разделов.Это физическое понятие.Соответствует одному или нескольким каталогам в системе.Раздел – это提交日志
. Сообщения записываются в разделы в форме добавления и читаются последовательно.
Примечание. Поскольку тема содержит бесконечное количество разделов, упорядочение по всей теме не гарантируется, но гарантированно будет упорядочен один раздел раздела. Сообщения принудительно записываются в конце каждого раздела. Kafka обеспечивает избыточность данных и масштабируемость за счет секционирования.
Разделы могут быть распределены по разным серверам, то есть тема может охватывать несколько серверов, чтобы обеспечить более высокую производительность, чем один сервер.
segment
Сегмент транслируется в сегменты, а Раздел далее подразделяется на несколько сегментов, каждый из которых имеет одинаковый размер файла.
broker
Кластер Kafka состоит из одного или нескольких серверов, и каждый сервер в Kafka называется брокером. Брокер получает сообщение от производителя, устанавливает смещение для сообщения и фиксирует сообщение на диске для сохранения. Брокер обслуживает потребителей, отвечая на запросы на чтение разделов, возвращая сообщения, которые были зафиксированы на диске.
Брокер является неотъемлемой частью кластера, и в каждом кластере будет брокер, который действует одновременно集群控制器(Leader)
роль, которая избирается активными членами кластера. Участник в каждом кластере может выступать в качестве лидера, а лидер отвечает за управление, включая назначение разделов брокерам и мониторинг брокеров. В кластере раздел принадлежит Лидеру, но раздел может быть назначен нескольким брокерам (не Лидерам), в этом случае происходит репликация раздела. Этот механизм репликации обеспечивает избыточность сообщений для разделов.Если брокер выйдет из строя, другие активные пользователи переизберут лидера, который возьмет на себя управление.
producer
Производитель, то есть издатель сообщения, опубликует сообщение темы в соответствующем разделе. Производители по умолчанию распределяют сообщения равномерно по всем разделам темы, независимо от того, в какой раздел записывается конкретное сообщение. Однако в некоторых случаях производитель будет записывать сообщение непосредственно в указанный раздел.
consumer
Потребитель, то есть пользователь сообщения. Потребитель может потреблять сообщения нескольких тем. Для сообщений определенной темы он будет потреблять только сообщения в одном разделе.
После понимания основных концепций Kafka мы получим более глубокое понимание Kafka, создав кластер Kafka.
Убедитесь, что среда установки
Установите среду Java
Перед установкой Kafka убедитесь, что в вашей среде Linux есть среда Java, используйтеjava -version
Команда для проверки версии Java.Рекомендуется использовать Jdk 1.8.Если среда Java не установлена, то установить ее можно по этой статье (woohoo.cn blogon.com/this is-notes/afraid/…
Установите среду Zookeeper
Нижний уровень Kafka использует Zookeeper для хранения метаданных для обеспечения согласованности, поэтому перед установкой Kafka необходимо установить Zookeeper.
Автономная конструкция Zookeeper
Автономная конструкция Zookeeper относительно проста, прямо изwoohoo.apache.org/wish you/closer. …Скачайте стабильную версию Zookeeper с официального сайта, здесь я использую3.4.10
, после завершения загрузки в системе Linux/usr/local
Создайте папку zookeeper в каталоге, используйтеxftp
Инструменты (инструменты xftp и xshell доступны на официальном сайтеwww.netsarang.com/zh/xshell/Подать заявку на бесплатную домашнюю версию) Поместите загруженный сжатый пакет zookeeper в каталог /usr/local/zookeeper.
Если вы загружаете пакет Tar.gz, используйте его напрямуюtar -zxvf zookeeper-3.4.10.tar.gz
Просто разархивируйте
Если вы загрузили zip-пакет, также проверьте, есть ли в Linux инструмент для распаковки, если нет, используйтеyum install unzip
Установите инструмент для распаковки zip и используйте его, когда закончитеunzip zookeeper-3.4.10.zip
Разархивируйте его.
После завершения распаковки перейдите к/usr/local/zookeeper/zookeeper-3.4.10
, создайте папку data, затем перейдите в папку conf, используйтеmv zoo_sample.cfg zoo.cfg
Переименовать операцию
Затем используйте VI открыл ZOO.CFG, измените егоdataDir = /usr/local/zookeeper/zookeeper-3.4.10/data
,спасти.
Войдите в каталог bin, запустите службу и введите команду ./zkServer.sh start
Следующий вывод указывает на то, что сборка выполнена успешно.
Для закрытия сервиса введите команду./zkServer.sh stop
использовать./zkServer.sh status
Информацию о состоянии можно просмотреть.
Настройка кластера Zookeeper
Условия приготовления
Условия подготовки: требуется три сервера, здесь я использовал CentOS7 и установил три виртуальные машины и назначил соответствующие виртуальные машины1GB
памяти, в каждом/usr/local/
Далее создайте новую папку zookeeper, переместите сжатый пакет zookeeper, распакуйте его, после завершения будет папка zookeeper-3.4.10, войдите в папку, и создайте две новые папки, а именноdata
иlog
папка
Примечание: Папка данных была создана в предыдущем разделе автономной конструкции, поэтому нет необходимости создавать ее заново, просто создайте новую папку журнала напрямую.Для двух других новых служб вам необходимо создать эти две папки.
Настроить кластер
После завершения создания необходимо отредактировать файл conf/zoo.cfg.Содержимое трех файлов выглядит следующим образом
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.10/log
clientPort=12181
server.1=192.168.1.7:12888:13888
server.2=192.168.1.8:12888:13888
server.3=192.168.1.9:12888:13888
1 в server.1 указывает, что идентификатор сервера также может быть другим числом, указывающим, какой это сервер.Этот идентификатор должен быть таким же, как тот, который мы настраиваем ниже.myid
Идентификация может быть последовательной.
192.168.1.7:12888:13888
Это IP-адрес в кластере, первый порт представляет собой интерфейс связи между ведущим и подчиненным, по умолчанию 2888, а второй порт — это порт для выбора лидера.Порт для выборов, по умолчанию 3888.
Теперь, чтобы объяснить вышеуказанный файл конфигурации
tickTime
: это время используется как между серверами Zookeeper или между клиентом и сервером.维持心跳
Интервал времени, т. е. каждый тиктайм отправляется пульс.
initLimit
: этот элемент конфигурации используется для настройки Zookeeper на прием клиента (упомянутый здесь клиент — это не клиент, которого пользователь подключает к серверу Zookeeper, а сервер-последователь, подключенный к ведущему в кластере серверов Zookeeper). Максимальное количество допускается при инициализации соединения. Количество интервалов подтверждения. Когда сервер Zookeeper не получил информацию о возврате от клиента после более чем 5 тактов (то есть, tickTime), это указывает на сбой подключения клиента. Общая продолжительность 5*2000=10 секунд.
syncLimit
: Этот элемент конфигурации определяет длину сообщения, отправляемого между лидером и ведомым, продолжительность запроса и времени ответа, самая длинная продолжительность времени не может превышать количество tickTimes, а общая продолжительность составляет 5 * 2000 = 10 секунд.
dataDir
: путь хранения журнала моментальных снимков
dataLogDir
: путь хранения журнала транзакций.Если это не настроено, журнал транзакций будет храниться в каталоге, указанном dataDir по умолчанию, что серьезно повлияет на производительность zk.Когда пропускная способность zk велика, слишком много транзакций создаются журналы и журналы моментальных снимков.
clientPort
: этот порт — это порт, через который клиент подключается к серверу Zookeeper. Zookeeper будет прослушивать этот порт и принимать запрос доступа клиента.
создать myid-файл
Разобравшись с его конфигурационным файлом, теперь создайте myid каждого узла кластера, как мы сказали выше, этот myidserver.1
Это 1 аналогично необходимо указать идентификатор для каждой службы в кластере, используяecho
команда для создания
# server.1
echo "1" > /usr/local/zookeeper/zookeeper-3.4.10/data/myid
# server.2
echo "2" > /usr/local/zookeeper/zookeeper-3.4.10/data/myid
# server.3
echo "3" > /usr/local/zookeeper/zookeeper-3.4.10/data/myid
Запустите службу и протестируйте
Настройка завершена, запустите и протестируйте каждую службу zk, и результаты тестирования на моем компьютере с Windows выглядят следующим образом.
Запустите сервис (каждый должен выполнить)
cd /usr/local/zookeeper/zookeeper-3.4.10/bin
./zkServer.sh start
Проверить статус услуги
использовать./zkServer.sh status
команда для проверки статуса службы
192.168.1.7 --- follower
192.168.1.8 --- leader
192.168.1.9 --- follower
Кластер zk обычно имеет только одного лидера и несколько последователей.Мастер обычно является запросом на чтение и запись соответствующего клиента, и данные синхронизируются с мастера.Когда мастер кладет трубку, он голосует за лидера из последователей .
Строительство кластера Kafka
Условия приготовления
- Созданный кластер Zookeeper
- архив Кафки (woohoo.apache.org/wish you/closer. …
существует/usr/local
под новымkafka
папку, а затем переместите загруженный пакет tar.gz в каталог /usr/local/kafka, используйтеtar -zxvf 压缩包
Разархивируйте, после завершения распаковки войдите в каталог kafka_2.12-2.3.0, создайте новую папку журнала и войдите в каталог конфигурации
Мы видим, что есть много файлов конфигурации свойств, основное внимание здесьserver.properties
Этот файл подойдет.
Существует два способа начать начало KAFKA, можно начать использовать файл конфигурации Zookeeper поставляется с KAFKA (может быть запущен в соответствии с официальным веб-сайтом, и используйте несколько узлов нескольких услуг для моделирования кластера.kafka.apache.org/быстрый старт#…zk кластер для запуска
Изменить элементы конфигурации
должно быть每个服务
Измените элементы конфигурации, т.е.server.properties
, содержание, которое необходимо обновить и добавить,
broker.id=0 //初始是0,每个 server 的broker.id 都应该设置为不一样的,就和 myid 一样 我的三个服务分别设置的是 1,2,3
log.dirs=/usr/local/kafka/kafka_2.12-2.3.0/log
#在log.retention.hours=168 下面新增下面三项
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
#设置zookeeper的连接端口
zookeeper.connect=192.168.1.7:2181,192.168.1.8:2181,192.168.1.9:2181
Значение элементов конфигурации
broker.id=0 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
port=9092 #当前kafka对外提供服务的端口默认是9092
host.name=192.168.1.7 #这个参数默认是关闭的,在0.8.1有个bug,DNS解析问题,失败率的问题。
num.network.threads=3 #这个是borker进行网络处理的线程数
num.io.threads=8 #这个是borker进行I/O处理的线程数
log.dirs=/usr/local/kafka/kafka_2.12-2.3.0/log #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes=102400 #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes=104857600 #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
num.partitions=1 #默认的分区数,一个topic默认1个分区数
log.retention.hours=168 #默认消息的最大持久化时间,168小时,7天
message.max.byte=5242880 #消息保存的最大值5M
default.replication.factor=2 #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
replica.fetch.max.bytes=5242880 #取消息的最大直接数
log.segment.bytes=1073741824 #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms=300000 #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除
log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=192.168.1.7:2181,192.168.1.8:2181,192.168.1.9:2181 #设置zookeeper的连接端口
Запустите кластер Kafka и протестируйте
- Запустите службу, перейдите в
/usr/local/kafka/kafka_2.12-2.3.0/bin
Под содержанием
# 启动后台进程
./kafka-server-start.sh -daemon ../config/server.properties
- Проверьте, запущена ли служба
# 执行命令 jps
6201 QuorumPeerMain
7035 Jps
6972 Kafka
- кафка была запущена
- Тема создана для проверки того, что создание успеха
# cd .. 往回退一层 到 /usr/local/kafka/kafka_2.12-2.3.0 目录下
bin/kafka-topics.sh --create --zookeeper 192.168.1.7:2181 --replication-factor 2 --partitions 1 --topic cxuan
Интерпретация вышеуказанного
--replication-factor 2 сделать две копии
--partitions 1 создать 1 раздел
--topic создать тему
Проверяем, успешно ли создана наша тема
bin/kafka-topics.sh --list --zookeeper 192.168.1.7:2181
Запустите службу, чтобы запустить кластер
Создание издателя на одном компьютере
# 创建一个broker,发布者
./kafka-console-producer.sh --broker-list 192.168.1.7:9092 --topic cxuantopic
Создание подписчика на одном сервере
# 创建一个consumer, 消费者
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.7:9092 --topic cxuantopic --from-beginning
Примечание. Если здесь используется --zookeeper, может появиться
zookeeper is not a recognized option
ошибка, это потому, что версия kafka слишком высокая, вам нужно использовать--bootstrap-server
инструкция
Результаты теста
выпуск
Потребление
другие команды
показать тему
bin/kafka-topics.sh --list --zookeeper 192.168.1.7:2181
# 显示
cxuantopic
Посмотреть статус темы
bin/kafka-topics.sh --describe --zookeeper 192.168.1.7:2181 --topic cxuantopic
# 下面是显示的详细信息
Topic:cxuantopic PartitionCount:1 ReplicationFactor:2 Configs:
Topic: cxuantopic Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
# 分区为为1 复制因子为2 主题 cxuantopic 的分区为0
# Replicas: 0,1 复制的为1,2
Leader
Узел, отвечающий за все операции чтения и записи для данного раздела, каждый узел выбирается случайным образом, чтобы стать лидером.
Replicas
представляет собой список узлов, реплицирующих журналы для этого раздела, независимо от того, являются ли они ведущими или активными в данный момент.
Isr
представляет собой набор синхронизированных реплик. Это подмножество списка реплик, которое в настоящее время все еще активно и следует за лидером.
На данный момент кластер kafka построен.
Multi-Node для проверки полученных данных
Сейчас мы все используем один и тот же IP-сервис, давайте воспользуемся узлами в других кластерах, чтобы проверить, можно ли получить сервис.
Используйте на двух других узлах
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.7:9092 --topic cxuantopic --from-beginning
Затем используйте брокера для отправки сообщений.После тестирования все три узла могут получать сообщения.
Подробная конфигурация
При создании Kafka мы кратко представилиserver.properties
Смысл конфигурации в , теперь подробно познакомимся с конфигурацией и понятием параметров
Общая конфигурация
Эти параметры являются самой базовой конфигурацией в kafka.
- broker.id
У каждого брокера должен быть идентификатор, представленный Broker.id. Его значение по умолчанию равно 0, и может быть установлено любое другое целое число.В кластере вам необходимо убедиться, что Broker.id каждого узла уникален.
- port
Если вы используете образец конфигурации для запуска kafka, он будет прослушивать порт 9092, измените параметр конфигурации порта, чтобы установить его на любой другой доступный порт.
- zookeeper.connect
Адрес, используемый для сохранения метаданных брокера, указан в zookeeper.connect. localhost:2181 означает работу на локальном порту 2181. Этот параметр конфигурации представляет собой разделенный запятыми список hostname:port/path , каждый из которых имеет следующее значение:
hostname — это имя службы или IP-адрес сервера zookeeper.
port — это порт, к которому подключен zookeeper.
/path — это необязательный путь zookeeper, который действует как среда chroot для кластера Kafka. Если не указано, по умолчанию используется следующий путь
- log.dirs
Kafka сохраняет сообщения на диск, а каталоги, в которых хранятся эти фрагменты журнала,log.dirs
указать. Это разделенный запятыми набор путей локальной файловой системы. Если указано несколько путей, брокер будет сохранять фрагменты журнала одного и того же раздела по одному и тому же пути в соответствии с принципом «наименьшего использования». Обратите внимание, что посредник добавит разделы к пути с наименьшим количеством разделов, а не к пути с наименьшим дисковым пространством.
- num.recovery.threads.per.data.dir
В следующих трех случаях Kafka будет использовать настраиваемый пул потоков для обработки фрагментов журнала.
Сервер запускается нормально, что используется для открытия фрагментов журнала для каждого раздела;
Запуск после сбоя сервера для проверки и усечения фрагментов журнала для каждого раздела;
Сервер корректно выключается для закрытия фрагментов журнала
По умолчанию для каждого каталога журналов используется только один поток. Поскольку эти потоки используются только при запуске и выключении сервера, можно настроить большое количество потоков для достижения цели бесперебойной работы. Особенно на серверах с большим количеством разделов, в случае сбоя, использование операции строки скважины может сэкономить часы времени во время восстановления. При настройке этого параметра обратите внимание, что настроенный номер соответствует одному каталогу журналов, указанному в log.dirs. То есть, если для num.recovery.threads.per.data.dir установлено значение 8, а в log.dir указано 3 пути, то всего требуется 24 потока.
- auto.create.topics.enable
По умолчанию Kafka будет создавать темы в следующих 3 случаях.
Когда продюсер начинает писать сообщения в тему
Когда потребитель начинает читать сообщения из темы
Когда любой клиент отправляет запрос метаданных в тему
- delete.topic.enable
Если вы хотите удалить тему, вы можете использовать инструмент управления темами. По умолчанию удаление темы запрещено, значение по умолчанию для параметра delete.topic.enable равно false, поэтому вы не можете удалять темы произвольно. Это разумная защита для производственных сред, но в средах разработки и тестирования вы можете удалять темы, поэтому, если вы хотите удалить темы, вам нужно установить для параметра delete.topic.enable значение true.
Конфигурация темы по умолчанию
Кафка предоставляет множество параметров конфигурации по умолчанию для вновь созданных тем, давайте узнаем эти параметры вместе
- num.partitions
Параметр num.partitions указывает, сколько разделов должна содержать вновь созданная тема. Если автоматическое создание темы включено (по умолчанию включено), количество разделов темы равно значению, указанному в этом параметре. Значение по умолчанию этого параметра равно 1. Обратите внимание, что мы можем увеличить количество тематических разделов, но не уменьшить количество разделов.
- default.replication.factor
Этот параметр относительно прост. Он указывает количество копий сообщений, сохраненных kafka. Если одна копия выходит из строя, другая может продолжать предоставлять услуги. Значение default.replication.factor по умолчанию равно 1. Этот параметр действителен после включения функция автоматического создания темы. .
- log.retention.ms
Кафка обычно определяет, как долго данные могут храниться в зависимости от времени. По умолчанию параметр log.retention.hours используется для настройки времени, которое по умолчанию составляет 168 часов, что составляет одну неделю. В дополнение к этому есть два параметра log.retention.minutes и log.retentiion.ms. Эти три параметра имеют одинаковую функцию, все они определяют, как долго сообщение будет удаляться, рекомендуется использовать log.retention.ms.
- log.retention.bytes
Другой способ сохранить сообщение — определить, истек ли срок его действия. Его значение передается через параметрlog.retention.bytes
указать, действуя на каждый раздел. То есть, если у вас есть тема с 8 разделами и для log.retention.bytes установлено значение 1 ГБ, то тема может хранить до 8 ГБ данных. Следовательно, когда количество разделов темы увеличивается, данные, которые могут храниться всей темой, также увеличиваются.
- log.segment.bytes
Все вышеперечисленные журналы действуют на фрагменты журнала, а не на отдельные сообщения. Когда сообщения поступают к брокеру, они добавляются к текущему сегменту журнала раздела. Когда размер сегмента журнала достигает верхнего предела, указанного log.segment.bytes (по умолчанию 1 ГБ), текущий сегмент журнала будет закрыт и новый сегмент журнала будет открыт. Если сегмент журнала закрыт, он начинает ожидать истечения срока действия. Чем меньше значение этого параметра, тем чаще будут закрываться и размещаться новые файлы, что снижает общую эффективность записи на диск.
- log.segment.ms
Как упоминалось выше, фрагмент журнала должен дождаться истечения срока действия после закрытия, а затемlog.segment.ms
Этот параметр представляет собой сумму параметров, указывающую, как долго журнал должен быть закрыт. Между log.segment.ms и log.retention.bytes нет проблемы взаимного исключения. Фрагменты журнала закрываются при достижении ограничения по размеру или времени, в зависимости от того, что наступит раньше.
- message.max.bytes
брокер, установивmessage.max.bytes
Параметр для ограничения размера одного сообщения, по умолчанию 1000 000, что составляет 1 МБ, если производитель попытается отправить сообщение, превышающее этот размер, не только сообщение не будет получено, но и сообщение об ошибке, возвращенное маклер. Как и другие параметры конфигурации, связанные с байтами, этот параметр относится к размеру сжатого сообщения, то есть, если сжатое сообщение меньше, чем message.max.bytes, фактический размер сообщения может быть больше этого значения.
Это значение оказывает значительное влияние на производительность. Чем выше значение, тем больше времени требуется потоку, отвечающему за обработку сетевых подключений и запросов, для обработки этих запросов. Это также увеличивает размер блока записи на диск, что влияет на пропускную способность ввода-вывода.
Если читатели этой статьи считают, что это неплохо, пожалуйста, поставьте лайк и оставьте сообщение, ваша поддержка будет для меня движущей силой, чтобы продолжать писать!
Кроме того, добавьте мой WeChat becxuan, присоединяйтесь к группе ежедневных вопросов и делитесь одним вопросом для интервью каждый день.Для получения дополнительной информации, пожалуйста, обратитесь к моему Github,Будь лучшим лучшимJavaer
Я лично перелил шесть PDF-файлов. После того, как программист поиска WeChat cxuan обратил внимание на официальный аккаунт, он ответил cxuan в фоновом режиме и получил все PDF-файлы.Эти PDF-файлы следующие