Рубрики
Без рубрики

Эксперимент в блокчане с Apache Kafka

Автор оригинала: 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 будет вызвать потребителя возвращать из метода через пять секунд, если новые сообщения не прочитаны (мы достигли конца цепочки)

Затем мы начинаем читать блочные сообщения от Блокчан тема:

Для каждого сообщения мы получаем:

  1. Если это первый блок в цепи, пропустить проверку и добавить в нашу внутреннюю копию (это блок Genesis)
  2. В противном случае проверьте блок действителен в отношении предыдущего блока, и добавьте его к нашей копии
  3. Держите записку о смещении блока, который мы просто потребляли

В конце этого процесса мы скачали всю цепочку, отбросив любые недопустимые блоки, и мы будем ссылаться на смещение последнего блока.

На данный момент мы готовы создать потребителя на транзакции тема:

Наша пример темы создан с двумя разделами, чтобы продемонстрировать, как работает разделение в Кафке. Перегородки настроены в Docker-Compose.yml Файл, с этой строкой:

Kafka_create_topics = транзакции: 2: 1, блокчан: 1: 1

Транзакции: 2: 1 Определяет количество разделов и фактора репликации (то есть, сколько брокеров будет поддерживать копию данных по этому разделу).

На этот раз наш потребитель начнется с Offsettype.latest Поэтому мы получаем только транзакции, опубликованные из текущего времени.

Закрепляя потребителя к определенному разделу транзакции Тема, мы можем увеличить общую пропускную способность всех потребителей на тему. Кофка-брокер равномерно распределяет входящие сообщения по двум разделам транзакций, если мы не укажем раздел, когда мы публикуем в теме. Это означает, что каждый потребитель будет отвечать за обработку 50% сообщений, удваивая потенциальную пропускную способность одного потребителя.

Теперь мы можем начать потребляющие транзакции:

Как получены транзакции, мы добавим их во внутренний список. Каждый три транзакции, мы создадим новый блок и звоните мой () :

  1. Во-первых, мы проверим, является ли наш блокчан самым длинным в сети; Наш спасенный компенсирован последние или у других узлов уже опубликованы позже блоки в блокчане? Это наш консенсус.
  2. Если новые блоки уже добавлены, мы будем использовать read_and_validate_chain От ранее, на этот раз поставляют наше последнее известное смещение, чтобы получить только новые блоки.
  3. На данный момент мы можем попытаться рассчитать доказательство работы, основываясь на доказательстве от последнего блока.
  4. Чтобы наградить себя за решение доказательства работы, мы можем вставить транзакцию в блок, уплачивая себе небольшую награду блока.
  5. Наконец, мы опубликуем наш блок на тему блокчан. Метод публикации выглядит так:

В действии

  1. Первый запуск брокера:

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, чтобы экспериментировать с распределенными партнерами к одноранговым транзакциям.

При масштабировании транзакций в публичном смысле представляет один набор вопросов, в частной сети или консорциуме, где уже установлено реальное доверие, масштабирование транзакций может быть достигнуто через реализацию, которая использует концепции Кафки.