You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@incubator.apache.org by jm...@apache.org on 2022/09/20 08:00:32 UTC

[incubator] 06/46: Training-34: Apache Pulsar

This is an automated email from the ASF dual-hosted git repository.

jmclean pushed a commit to branch ApacheConSlides
in repository https://gitbox.apache.org/repos/asf/incubator.git

commit f97232d89e5bc8dbc4a37bd117dac331f4dc9455
Author: Gautam Gupta <gr...@gmail.com>
AuthorDate: Mon Oct 5 16:23:05 2020 -0700

    Training-34: Apache Pulsar
---
 content/ApachePulsar/pom.xml                       |  39 +++
 content/ApachePulsar/src/main/asciidoc/index.adoc  | 133 ++++++++
 .../src/main/resources/images/logo-apache.png      | Bin 0 -> 16185 bytes
 content/ApachePulsar/src/main/theme/apache.css     | 349 +++++++++++++++++++++
 4 files changed, 521 insertions(+)

diff --git a/content/ApachePulsar/pom.xml b/content/ApachePulsar/pom.xml
new file mode 100644
index 00000000..6dfb8d8b
--- /dev/null
+++ b/content/ApachePulsar/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.0.0</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.apache.training</groupId>
+  <artifactId>apache-samza</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <name>Apache Samza Slides</name>
+  <description></description>
+
+</project>
diff --git a/content/ApachePulsar/src/main/asciidoc/index.adoc b/content/ApachePulsar/src/main/asciidoc/index.adoc
new file mode 100644
index 00000000..0236a1dc
--- /dev/null
+++ b/content/ApachePulsar/src/main/asciidoc/index.adoc
@@ -0,0 +1,133 @@
+////
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+////
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:sourcedir: ../java
+
+== What is Apache Pulsar?
+Apache Pulsar is a cloud-native, distributed messaging and streaming platform. Pulsar is a multi-tenant, high-performance solution for server-to-server messaging. It was originally created at Yahoo!
+
+image::https://pulsar.apache.org/img/pulsar.svg[width=50%]
+
+== Pulsar Features
+Apache Pulsar provides following features:
+
+* Native support for multiple clusters in a Pulsar instance, with seamless geo-replication of messages across clusters.
+* Very low publish and end-to-end latency.
+* Seamless scalability to over a million topics.
+* A simple client API with bindings for Java, Go, Python and C++.
+* Multiple subscription modes (exclusive, shared, and failover) for topics.
+
+
+== Pulsar Features contd.
+
+* Guaranteed message delivery with persistent message storage provided by Apache BookKeeper.
+* A serverless light-weight computing framework Pulsar Functions offers the capability for stream-native data processing.
+* A serverless connector framework Pulsar IO, which is built on Pulsar Functions, makes it easier to move data in and out of Apache Pulsar.
+* Tiered Storage offloads data from hot/warm storage to cold/longterm storage (such as S3 and GCS) when the data is aging out.
+
+== Pulsar High Level Architecture
+
+image::https://pulsar.apache.org/docs/assets/pulsar-system-architecture.png[width=90%]
+
+== Pulsar: Messaging
+Pulsar is built on the publish-subscribe pattern (short for pub-sub). In this pattern, producers publish messages to topics. Consumers subscribe to those topics, process incoming messages, and send an acknowledgement when processing is complete.
+
+When a subscription is created, Pulsar retains all messages, even if the consumer is disconnected. Retained messages are discarded only when a consumer acknowledges that those messages are processed successfully.
+
+== Pulsar: Messages
+Messages are the basic "unit" of Pulsar. The following table lists the components of messages.
+
+* Value / data payload
+* Key
+* Properties
+* Producer name
+* Sequence ID
+* Publish time
+* Event time
+* TypedMessageBuilder
+
+== Pulsar: Producers
+
+A producer is a process that attaches to a topic and publishes messages to a Pulsar broker. The Pulsar broker process the messages.
+
+Producers send messages to brokers synchronously (sync) or asynchronously (async).
+
+== Pulsar: Send Modes
+
+* *Sync send:* The producer waits for an acknowledgement from the broker after sending every message. If the acknowledgment is not received, the producer treats the sending operation as a failure.
+* *Async send:* The producer puts a message in a blocking queue and returns immediately. The client library sends the message to the broker in the background. If the queue is full (you can configure the maximum size), the producer is blocked or fails immediately when calling the API, depending on arguments passed to the producer.
+
+== Pulsar: Compression
+
+Pulsar can compress messages published by producers during transportation. Pulsar currently supports the following types of compression:
+
+* LZ4
+* ZLIB
+* ZSTD
+* SNAPPY
+
+== Pulsar: Cluster
+
+A Pulsar instance is composed of one or more Pulsar clusters. Clusters within an instance can replicate data amongst themselves. In a Pulsar cluster:
+
+* One or more brokers handles and load balances incoming messages from producers, dispatches messages to consumers, communicates with the Pulsar configuration store to handle various coordination tasks, stores messages in BookKeeper instances (aka bookies), relies on a cluster-specific ZooKeeper cluster for certain tasks, and more.
+* A BookKeeper cluster consisting of one or more bookies handles persistent storage of messages.
+* A ZooKeeper cluster specific to that cluster handles coordination tasks between Pulsar clusters.
+
+== Pulsar: Broker
+
+The Pulsar message broker is a stateless component responsible for running two other components:
+
+* An HTTP server that exposes a REST API for both administrative tasks and topic lookup for producers and consumers
+* A dispatcher, which is an asynchronous TCP server over a custom binary protocol used for all data transfers
+
+
+== Pulsar: Geo Replication
+
+Pulsar enables messages to be produced and consumed in different geo-locations.
+For instance, an application publishing data in one region or market can also process it for consumption in other regions or markets.
+Geo-replication in Pulsar enables this.
+
+== Pulsar: Multi Tenancy
+
+Pulsar was created from the ground up as a multi-tenant system. To support multi-tenancy, Pulsar has a concept of tenants.
+Tenants can be spread across clusters and can each have their own authentication and authorization scheme applied to them.
+They are also the administrative unit at which storage quotas, message TTL, and isolation policies can be managed.
+
+
+== Pulsar: Authentication and Authorization
+
+Pulsar supports a pluggable authentication mechanism.
+It can be configured at broker and it also supports authorization to identify client and its access rights on topics and tenants.
+
+== Pulsar: Topic Compaction
+
+* Allows for faster "rewind" through topic logs
+* Applies only to persistent topics
+* Triggered automatically when the backlog reaches a certain size
+* Can be triggered manually via the command line
+* Distinct from retention and expiry. Topic compaction respects retention
+
+== Further Sources
+Refer official documents on Apache Pulsar here:
+
+* *Pulsar Documentation*: https://pulsar.apache.org/en/
+* *Pulsar Blog*: https://pulsar.apache.org/blog/
+
diff --git a/content/ApachePulsar/src/main/resources/images/logo-apache.png b/content/ApachePulsar/src/main/resources/images/logo-apache.png
new file mode 100644
index 00000000..44c337b0
Binary files /dev/null and b/content/ApachePulsar/src/main/resources/images/logo-apache.png differ
diff --git a/content/ApachePulsar/src/main/theme/apache.css b/content/ApachePulsar/src/main/theme/apache.css
new file mode 100644
index 00000000..079a53f6
--- /dev/null
+++ b/content/ApachePulsar/src/main/theme/apache.css
@@ -0,0 +1,349 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+  color: #fff; }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+  background-image: url("../../../images/background.jpg");
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-color: #fff; }
+
+.reveal {
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-size: 34px;
+  font-weight: normal;
+  color: #000; }
+
+::selection {
+  color: #000;
+  background: #bee4fd;
+  text-shadow: none; }
+
+.reveal .slides > section, .reveal .slides > section > section {
+  line-height: 1.3;
+  font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+  margin: 0 0 20px 0;
+  color: #000;
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-weight: 600;
+  line-height: 1.2;
+  letter-spacing: normal;
+  text-transform: uppercase;
+  text-shadow: none;
+  word-wrap: break-word; }
+
+.reveal h1 {
+  font-size: 2.5em; }
+
+.reveal h2 {
+  font-size: 1.6em; }
+
+.reveal h3 {
+  font-size: 1.3em; }
+
+.reveal h4 {
+  font-size: 1em; }
+
+.reveal h1 {
+  text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+  margin: 20px 0;
+  line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+  max-width: 95%;
+  max-height: 95%; }
+
+.reveal strong, .reveal b {
+  font-weight: bold; }
+
+.reveal em {
+  font-style: italic; }
+
+.reveal ol, .reveal dl, .reveal ul {
+  display: inline-block;
+  text-align: left;
+  margin: 0 0 0 1em; }
+
+.reveal ol {
+  list-style-type: decimal; }
+
+.reveal ul {
+  list-style-type: disc; }
+
+.reveal ul ul {
+  list-style-type: square; }
+
+.reveal ul ul ul {
+  list-style-type: circle; }
+
+.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
+  display: block;
+  margin-left: 40px; }
+
+.reveal dt {
+  font-weight: bold; }
+
+.reveal dd {
+  margin-left: 40px; }
+
+.reveal q, .reveal blockquote {
+  quotes: none; }
+
+.reveal blockquote {
+  display: block;
+  position: relative;
+  width: 70%;
+  margin: 20px auto;
+  padding: 5px;
+  font-style: italic;
+  background: rgba(255, 255, 255, 0.05);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+  display: inline-block; }
+
+.reveal q {
+  font-style: italic; }
+
+.reveal pre {
+  display: block;
+  position: relative;
+  width: 90%;
+  margin: 20px auto;
+  text-align: left;
+  font-size: 0.55em;
+  font-family: monospace;
+  line-height: 1.2em;
+  word-wrap: break-word;
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+  font-family: monospace; }
+
+.reveal pre code {
+  display: block;
+  padding: 5px;
+  overflow: auto;
+  max-height: 400px;
+  word-wrap: normal;
+  background: #3F3F3F;
+  color: #DCDCDC; }
+
+.reveal table {
+  margin: auto;
+  border-collapse: collapse;
+  border-spacing: 0; }
+
+.reveal table th {
+  font-weight: bold; }
+
+.reveal table th, .reveal table td {
+  text-align: left;
+  padding: 0.2em 0.5em 0.2em 0.5em;
+  border-bottom: 1px solid; }
+
+.reveal table th[align="center"], .reveal table td[align="center"] {
+  text-align: center; }
+
+.reveal table th[align="right"], .reveal table td[align="right"] {
+  text-align: right; }
+
+.reveal table tr:last-child td {
+  border-bottom: none; }
+
+.reveal sup {
+  vertical-align: super; }
+
+.reveal sub {
+  vertical-align: sub; }
+
+.reveal small {
+  display: inline-block;
+  font-size: 0.6em;
+  line-height: 1.2em;
+  vertical-align: top; }
+
+.reveal small * {
+  vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+  color: #42affa;
+  text-decoration: none;
+  -webkit-transition: color 0.15s ease;
+  -moz-transition: color 0.15s ease;
+  transition: color 0.15s ease; }
+
+.reveal a:hover {
+  color: #8dcffc;
+  text-shadow: none;
+  border: none; }
+
+.reveal .roll span:after {
+  color: #fff;
+  background: #068ee9; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+  margin: 15px 0;
+  /*background: rgba(255, 255, 255, 0.12);*/
+  /*border: 4px solid #fff;*/
+  /*box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);*/ }
+
+.reveal a img {
+  -webkit-transition: all 0.15s linear;
+  -moz-transition: all 0.15s linear;
+  transition: all 0.15s linear; }
+
+.reveal a:hover img {
+  background: rgba(255, 255, 255, 0.2);
+  border-color: #42affa;
+  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
+  border-right-color: #42affa; }
+
+.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
+  border-left-color: #42affa; }
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+  border-bottom-color: #42affa; }
+
+.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
+  border-top-color: #42affa; }
+
+.reveal .controls div.navigate-left.enabled:hover {
+  border-right-color: #8dcffc; }
+
+.reveal .controls div.navigate-right.enabled:hover {
+  border-left-color: #8dcffc; }
+
+.reveal .controls div.navigate-up.enabled:hover {
+  border-bottom-color: #8dcffc; }
+
+.reveal .controls div.navigate-down.enabled:hover {
+  border-top-color: #8dcffc; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+  background: rgba(0, 0, 0, 0.2); }
+
+.reveal .progress span {
+  background: #42affa;
+  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+  color: #42affa; }
+
+.reveal .red {
+  color: red;
+}
+
+/*********************************************
+ * C3JS Charts
+ *********************************************/
+
+.c3 {
+  fill: white;  }
+
+.c3 line, .c3 path {
+  stroke: white !important; }
+
+/*********************************************
+ * Custom styling of individual charts
+ *********************************************/
+
+#most-significant-barriers .c3-shape .c3-shape-2 .c3-bar .c3-bar-2 {
+  color: red;
+}
+
+/*********************************************
+ * Footer and Header
+ *********************************************/
+
+.header {
+  position:relative;
+}
+/*.header .left {
+  position:absolute;
+  top: 5px;
+  left: 5px;
+  width: 196px;
+  height: 100px;
+  background-image: url("../../../images/logo-building-iot.png");
+}*/
+.header .right {
+  position:absolute;
+  top: 5px;
+  right: 5px;
+  width: 246px;
+  height: 100px;
+  background-image: url("../../../images/logo-apache.png");
+}
+
+.footer {
+  position:relative;
+}
+/*.footer .left {
+  position:absolute;
+  bottom: 5px;
+  left: 5px;
+  width: 392px;
+  height: 50px;
+  background-image: url("../../../images/logo-company.png");
+}
+.footer .right {
+  position:absolute;
+  bottom: 5px;
+  right: 5px;
+  width: 306px;
+  height: 100px;
+  background-image: url("../../../images/logo-training.png");
+}*/
+


---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@incubator.apache.org
For additional commands, e-mail: cvs-help@incubator.apache.org