Автор оригинала: FreeCodeCapm Team.
Луком Рассел
Органы технологии Blockchain и Apache Kafka Share Share, которые предлагают естественное аффинность. Например, оба разделяют концепцию «неизменной добавления только в журнале». В случае раздела кафки:
В то время как блокчан можно описать как:
Очевидно, что эти технологии разделяют параллельные концепции неизменной последовательной структуры, причем кафка особенно оптимизирована для высокой пропускной способности и горизонтальной масштабируемости, а также блокируют, превосходящий порядок и структуру последовательности.
Интеграв эти технологии, мы можем создать платформу для экспериментов с концепциями BlockChain.
KAFKA предоставляет удобную рамку для распределенного со стороны сверстников, с некоторыми характеристиками, особенно подходящими для приложений Blockchain. Хотя этот подход не может быть жизнеспособным в беспорядковой общественной среде, могут быть практические применения в частной или консорциумной сети. Посмотреть Масштабирование блокировки с Apache Kafka Для дальнейших идей о том, как это может быть реализовано.
Кроме того, с некоторыми экспериментами мы можем нарисовать концепции, уже реализованные в Кафке (например, Sharding Portition) для изучения решений для блокировки проблем в государственных сетях (например, проблемы масштабируемости).
Поэтому целью этого эксперимента является простая внедрение блокчан и портировать его на платформу Кафки; Мы возьмем концепцию Kafka в последовательном журнале и гарантируем неизменность, ценим записи вместе с хэшими. Блокчан
Тема на Кафке станет нашей распределенной книгой. Графически это будет выглядеть так:
Введение в Кафка
KAFKA – это потоковая платформа, предназначенная для высокопроизводительной, обмена сообщениями в реальном времени, то есть оно позволяет публикации и подписку на потоки записей. В этом отношении он похож на очередью сообщений или традиционной системы обмена корпоративными сообщениями. Некоторые из характеристик:
- Высокая пропускная способность: кафка брокеры могут поглощать гигабайты данных в секунду, переводя в миллионы сообщений в секунду. Вы можете прочитать больше о характеристиках масштабируемости в Бенчмаркинг Apache Kafka: 2 миллиона пишет в секунду Отказ
- Конкурирующие потребители: одновременное доставку сообщений нескольким потребителям, как правило, дорогие в традиционных системах обмена сообщениями, не является более сложной, чем для одного потребителя. Это означает, что мы можем разработать конкурирующие потребители , гарантируя, что каждый потребитель получит только одно из сообщений и достижение высокой степени горизонтальной масштабируемости.
- Толерантность к неисправностям: путем репликации данных по нескольким узлам в кластере в кластере воздействие отдельных отказов узла минимизируется.
- Задержка и воспроизведение сообщений: Kafka Brokers поддерживает запись компенсации потребителей – позиции потребителей в потоке сообщений. Используя это, потребители могут перемотать до предыдущей позиции в потоке, даже если сообщения уже доставлены, позволяя им воссоздать состояние системы в момент времени. Брокеры могут быть настроены на сохранение сообщений на неопределенный срок, что необходимо для приложений Blockchain.
В кафе кафка каждая тема разделена на разделы, где каждый раздел представляет собой последовательность записей, которые постоянно добавляются. Это похоже на файл журнала текста, где новые строки добавлены к концу. Записи в разделе раздела назначают последовательный идентификатор, называемый смещением, который однозначно идентифицирует запись.
Брокер Kafka может быть запрошен за счет компенсации, то есть потребитель может сбросить его смещение к какой-то произвольной точке в журнале для извлечения записей с этого момента.
Руководство
Полный исходный код – Доступно здесь Отказ
Предпосылки
- Некоторое понимание концепций BlockChain: учебное пособие ниже основано на реализациях от Даниэль Ван Флауэнс и Джеральд Нэш , как отличные практические введения. Следующие учебные пособия в значительной степени опираются на эти концепции, одновременно используя кафка в качестве сообщения транспорта. По сути, мы портим Python Blockchain в Кафку, сохраняя при этом большую часть текущей реализации.
- Базовые знания Python: код написан для Python 3.6.
- Докер : Docker-Compose используется для запуска брокера Кафка.
- Кафкакат : Это полезный инструмент для взаимодействия с кафкой (например, публикация сообщений к темам)
При запуске наш потребитель KAFKA попытается сделать три вещи: инициализируйте новый блокчан, если он еще не был создан; построить внутреннее представление текущего состояния темы Blockchain; Затем начните читать транзакции в петле:
Шаг инициализации выглядит так:
Во-первых, мы находим самые высокие доступные смещения на теме блокчан. Если в теме ничего не было опубликовано, блокчан новая, поэтому мы начнем с создания и публикации блока Genesis:
В read_and_validate_chain ()
Сначала мы сначала создадим потребителя, чтобы прочитать из Блокчан
тема:
Некоторые заметки по параметрам мы создаем этот потребитель с:
- Установка потребительской группы к
Блокчан
Группа позволяет брокеру сохранить ссылку на компенсацию, которые потребители были достигнуты для данного раздела и темы auto_offset_reset = offsettype.earliest
Указывает, что мы начнем загрузку сообщений с начала темы.auto_commit_enable = true
Периодически уведомлевшись за брокером компенсации, который мы только что потребляли (в отличие от вручную вручную)RESET_OFFSET_ON_START = TRUE
это переключатель, который активируетauto_offset_reset
для потребителяThumber_Timeout_ms = 5000
будет вызвать потребителя возвращать из метода через пять секунд, если новые сообщения не прочитаны (мы достигли конца цепочки)
Затем мы начинаем читать блочные сообщения от Блокчан
тема:
Для каждого сообщения мы получаем:
- Если это первый блок в цепи, пропустить проверку и добавить в нашу внутреннюю копию (это блок Genesis)
- В противном случае проверьте блок действителен в отношении предыдущего блока, и добавьте его к нашей копии
- Держите записку о смещении блока, который мы просто потребляли
В конце этого процесса мы скачали всю цепочку, отбросив любые недопустимые блоки, и мы будем ссылаться на смещение последнего блока.
На данный момент мы готовы создать потребителя на транзакции
тема:
Наша пример темы создан с двумя разделами, чтобы продемонстрировать, как работает разделение в Кафке. Перегородки настроены в Docker-Compose.yml
Файл, с этой строкой:
Kafka_create_topics = транзакции: 2: 1, блокчан: 1: 1
Транзакции: 2: 1
Определяет количество разделов и фактора репликации (то есть, сколько брокеров будет поддерживать копию данных по этому разделу).
На этот раз наш потребитель начнется с Offsettype.latest
Поэтому мы получаем только транзакции, опубликованные из текущего времени.
Закрепляя потребителя к определенному разделу транзакции
Тема, мы можем увеличить общую пропускную способность всех потребителей на тему. Кофка-брокер равномерно распределяет входящие сообщения по двум разделам транзакций, если мы не укажем раздел, когда мы публикуем в теме. Это означает, что каждый потребитель будет отвечать за обработку 50% сообщений, удваивая потенциальную пропускную способность одного потребителя.
Теперь мы можем начать потребляющие транзакции:
Как получены транзакции, мы добавим их во внутренний список. Каждый три транзакции, мы создадим новый блок и звоните мой ()
:
- Во-первых, мы проверим, является ли наш блокчан самым длинным в сети; Наш спасенный компенсирован последние или у других узлов уже опубликованы позже блоки в блокчане? Это наш консенсус.
- Если новые блоки уже добавлены, мы будем использовать
read_and_validate_chain
От ранее, на этот раз поставляют наше последнее известное смещение, чтобы получить только новые блоки. - На данный момент мы можем попытаться рассчитать доказательство работы, основываясь на доказательстве от последнего блока.
- Чтобы наградить себя за решение доказательства работы, мы можем вставить транзакцию в блок, уплачивая себе небольшую награду блока.
- Наконец, мы опубликуем наш блок на тему блокчан. Метод публикации выглядит так:
В действии
- Первый запуск брокера:
Docker-Compose Up -D
2. Запустите потребитель на раздел 0:
python kafka_blockchain.py 0.
3. Опубликовать 3 транзакции непосредственно разделы 0:
4. Проверьте, транзакции были добавлены в блок на Блокчан
тема:
Kafkacat -c-b kafka: 9092 -T blockchain
Вы должны увидеть, как это так:
Чтобы сбалансировать транзакции на двух потребителях, начните второй потребитель на раздел 1 и удалить -P 0
из скрипта публикации выше.
Заключение
Кафка может обеспечить фундамент для простых рамок для экспериментов в Блокчане. Мы можем воспользоваться функциями, встроенными в платформу, и связанные инструменты, такие как KAFKACACAT, чтобы экспериментировать с распределенными партнерами к одноранговым транзакциям.
При масштабировании транзакций в публичном смысле представляет один набор вопросов, в частной сети или консорциуме, где уже установлено реальное доверие, масштабирование транзакций может быть достигнуто через реализацию, которая использует концепции Кафки.