0% found this document useful (0 votes)
12 views

Download full (Ebook) Stream Processing with Apache Flink: Fundamentals, Implementation, and Operation of Streaming Applications by Fabian Hueske, Vasiliki Kalavri ISBN 9781491974292, 149197429X ebook all chapters

The document provides information about various ebooks available for download on ebooknice.com, including titles related to stream processing with Apache Flink and other subjects. It outlines the content and structure of the book 'Stream Processing with Apache Flink' by Fabian Hueske and Vasiliki Kalavri, which covers fundamentals, implementation, and operation of streaming applications. Additionally, it includes details about the authors, publication information, and acknowledgments for contributions to the Apache Flink community.

Uploaded by

bonamethyniv
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

Download full (Ebook) Stream Processing with Apache Flink: Fundamentals, Implementation, and Operation of Streaming Applications by Fabian Hueske, Vasiliki Kalavri ISBN 9781491974292, 149197429X ebook all chapters

The document provides information about various ebooks available for download on ebooknice.com, including titles related to stream processing with Apache Flink and other subjects. It outlines the content and structure of the book 'Stream Processing with Apache Flink' by Fabian Hueske and Vasiliki Kalavri, which covers fundamentals, implementation, and operation of streaming applications. Additionally, it includes details about the authors, publication information, and acknowledgments for contributions to the Apache Flink community.

Uploaded by

bonamethyniv
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download the Full Ebook and Access More Features - ebooknice.

com

(Ebook) Stream Processing with Apache Flink:


Fundamentals, Implementation, and Operation of
Streaming Applications by Fabian Hueske, Vasiliki
Kalavri ISBN 9781491974292, 149197429X
https://ebooknice.com/product/stream-processing-with-apache-
flink-fundamentals-implementation-and-operation-of-
streaming-applications-10445358

OR CLICK HERE

DOWLOAD EBOOK

Download more ebook instantly today at https://ebooknice.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

(Ebook) Biota Grow 2C gather 2C cook by Loucas, Jason; Viles, James ISBN
9781459699816, 9781743365571, 9781925268492, 1459699815, 1743365578, 1925268497

https://ebooknice.com/product/biota-grow-2c-gather-2c-cook-6661374

ebooknice.com

(Ebook) Matematik 5000+ Kurs 2c Lärobok by Lena Alfredsson, Hans Heikne, Sanna
Bodemyr ISBN 9789127456600, 9127456609

https://ebooknice.com/product/matematik-5000-kurs-2c-larobok-23848312

ebooknice.com

(Ebook) SAT II Success MATH 1C and 2C 2002 (Peterson's SAT II Success) by Peterson's
ISBN 9780768906677, 0768906679

https://ebooknice.com/product/sat-ii-success-math-1c-and-2c-2002-peterson-s-sat-
ii-success-1722018

ebooknice.com

(Ebook) Master SAT II Math 1c and 2c 4th ed (Arco Master the SAT Subject Test: Math
Levels 1 & 2) by Arco ISBN 9780768923049, 0768923042

https://ebooknice.com/product/master-sat-ii-math-1c-and-2c-4th-ed-arco-master-
the-sat-subject-test-math-levels-1-2-2326094

ebooknice.com
(Ebook) Cambridge IGCSE and O Level History Workbook 2C - Depth Study: the United
States, 1919-41 2nd Edition by Benjamin Harrison ISBN 9781398375147, 9781398375048,
1398375144, 1398375047

https://ebooknice.com/product/cambridge-igcse-and-o-level-history-
workbook-2c-depth-study-the-united-states-1919-41-2nd-edition-53538044

ebooknice.com

(Ebook) Stream Processing with Apache Spark: Mastering Structured Streaming and
Spark Streaming by Gerard Maas, Francois Garillot ISBN 9781491944240, 1491944242

https://ebooknice.com/product/stream-processing-with-apache-spark-mastering-
structured-streaming-and-spark-streaming-10998176

ebooknice.com

(Ebook) Streaming Databases: Unifying Batch and Stream Processing by Hubert Dulay &
Ralph Matthias Debusmann ISBN 9781098154837, 1098154835

https://ebooknice.com/product/streaming-databases-unifying-batch-and-stream-
processing-58912206

ebooknice.com

(Ebook) Modern Data Engineering with Apache Spark: A Hands-On Guide for Building
Mission-Critical Streaming Applications by Scott Haines ISBN 9781484274514,
1484274512

https://ebooknice.com/product/modern-data-engineering-with-apache-spark-a-hands-
on-guide-for-building-mission-critical-streaming-applications-42509132

ebooknice.com

(Ebook) Designing Event-Driven Systems: Concepts and Patterns for Streaming Services
with Apache Kafka by Ben Stopford ISBN 9781492038221, 1492038229

https://ebooknice.com/product/designing-event-driven-systems-concepts-and-
patterns-for-streaming-services-with-apache-kafka-7246304

ebooknice.com
Stream Processing with
Apache Flink
Fundamentals, Implementation, and Operation of
Streaming Applications

Fabian Hueske and Vasiliki Kalavri


Stream Processing with Apache Flink
by Fabian Hueske and Vasiliki Kalavri
Copyright © 2019 Fabian Hueske, Vasiliki Kalavri. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North,
Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales
promotional use. Online editions are also available for most titles
(http://oreilly.com). For more information, contact our
corporate/institutional sales department: 800-998-9938 or
[email protected].

Acquisitions Editor: Rachel Roumeliotis

Development Editor: Alicia Young

Production Editor: Katherine Tozer

Copyeditor: Christina Edwards

Proofreader: Charles Roumeliotis

Indexer: Judith McConville

Interior Designer: David Futato

Cover Designer: Karen Montgomery

Illustrator: Rebecca Demarest

April 2019: First Edition


Revision History for the First Edition
2019-04-03: First Release

See http://oreilly.com/catalog/errata.csp?isbn=9781491974292 for


release details.
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc.
Stream Processing with Apache Flink, the cover image, and related
trade dress are trademarks of O’Reilly Media, Inc.
The views expressed in this work are those of the authors, and do
not represent the publisher’s views. While the publisher and the
authors have used good faith efforts to ensure that the information
and instructions contained in this work are accurate, the publisher
and the authors disclaim all responsibility for errors or omissions,
including without limitation responsibility for damages resulting from
the use of or reliance on this work. Use of the information and
instructions contained in this work is at your own risk. If any code
samples or other technology this work contains or describes is
subject to open source licenses or the intellectual property rights of
others, it is your responsibility to ensure that your use thereof
complies with such licenses and/or rights.
978-1-491-97429-2
[LSI]
Preface

What You Will Learn in This Book


This book will teach you everything you need to know about stream
processing with Apache Flink. It consists of 11 chapters that
hopefully tell a coherent story. While some chapters are descriptive
and aim to introduce high-level design concepts, others are more
hands-on and contain many code examples.
While we intended for the book to be read in chapter order when we
were writing it, readers familiar with a chapter’s content might want
to skip it. Others more interested in writing Flink code right away
might want to read the practical chapters first. In the following, we
briefly describe the contents of each chapter, so you can directly
jump to those chapters that interest you most.
Chapter 1 gives an overview of stateful stream processing,
data processing application architectures, application
designs, and the benefits of stream processing over
traditional approaches. It also gives you a brief look at what
it is like to run your first streaming application on a local
Flink instance.
Chapter 2 discusses the fundamental concepts and
challenges of stream processing, independent of Flink.
Chapter 3 describes Flink’s system architecture and
internals. It discusses distributed architecture, time and state
handling in streaming applications, and Flink’s fault-tolerance
mechanisms.
Chapter 4 explains how to set up an environment to develop
and debug Flink applications.
Chapter 5 introduces you to the basics of the Flink’s
DataStream API. You will learn how to implement a
DataStream application and which stream transformations,
functions, and data types are supported.
Chapter 6 discusses the time-based operators of the
DataStream API. This includes window operators and time-
based joins as well as process functions that provide the
most flexibility when dealing with time in streaming
applications.
Chapter 7 explains how to implement stateful functions and
discusses everything around this topic, such as the
performance, robustness, and evolution of stateful functions.
It also shows how to use Flink’s queryable state.
Chapter 8 presents Flink’s most commonly used source and
sink connectors. It discusses Flink’s approach to end-to-end
application consistency and how to implement custom
connectors to ingest data from and emit data to external
systems.
Chapter 9 discusses how to set up and configure Flink
clusters in various environments.
Chapter 10 covers operation, monitoring, and maintenance
of streaming applications that run 24/7.
Finally, Chapter 11 contains resources you can use to ask
questions, attend Flink-related events, and learn how Flink is
currently being used.

Conventions Used in This Book


The following typographical conventions are used in this book:
Italic
Indicates new terms, URLs, email addresses, filenames, and file
extensions.

Constant width
Used for program listings, as well as within paragraphs to refer to
program elements such as variable or function names, databases,
data types, environment variables, statements, and keywords.
Also used for module and package names, and to show
commands or other text that should be typed literally by the user
and the output of commands.

Constant width italic


Shows text that should be replaced with user-supplied values or
by values determined by context.

TIP
This element signifies a tip or suggestion.

NOTE
This element signifies a general note.

WARNING
This element signifies a warning or caution.

Using Code Examples


Supplemental material (code examples in Java and Scala) is available
for download at https://github.com/streaming-with-flink.
This book is here to help you get your job done. In general, if
example code is offered with this book, you may use it in your
programs and documentation. You do not need to contact us for
permission unless you’re reproducing a significant portion of the
code. For example, writing a program that uses several chunks of
code from this book does not require permission. Selling or
distributing a CD-ROM of examples from O’Reilly books does require
permission. Answering a question by citing this book and quoting
example code does not require permission. Incorporating a
significant amount of example code from this book into your
product’s documentation does require permission.
We appreciate, but do not require, attribution. An attribution usually
includes the title, author, publisher, and ISBN. For example: “Stream
Processing with Apache Flink by Fabian Hueske and Vasiliki Kalavri
(O’Reilly). Copyright 2019 Fabian Hueske and Vasiliki Kalavri, 978-1-
491-97429-2.”
If you feel your use of code examples falls outside fair use or the
permission given above, feel free to contact us at
[email protected].

O’Reilly Online Learning

NOTE
For almost 40 years, O’Reilly has provided technology and business
training, knowledge, and insight to help companies succeed.

Our unique network of experts and innovators share their knowledge


and expertise through books, articles, conferences, and our online
learning platform. O’Reilly’s online learning platform gives you on-
demand access to live training courses, in-depth learning paths,
interactive coding environments, and a vast collection of text and
video from O’Reilly and 200+ other publishers. For more information,
please visit http://oreilly.com.

How to Contact Us
Please address comments and questions concerning this book to the
publisher:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

800-998-9938 (in the United States or Canada)

707-829-0515 (international or local)

707-829-0104 (fax)

We have a web page for this book, where we list errata, examples,
and any additional information. You can access this page at
http://bit.ly/stream-proc.
To comment or ask technical questions about this book, send email
to [email protected].
For more information about our books, courses, conferences, and
news, see our website at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Follow the authors on Twitter: @fhueske and @vkalavri
Acknowledgments
This book couldn’t have been possible without the help and support
of several amazing people. We would like to thank and acknowledge
some of them here.
This book summarizes knowledge obtained through years of design,
development, and testing performed by the Apache Flink community
at large. We are grateful to everyone who has contributed to Flink
through code, documentation, reviews, bug reports, feature
requests, mailing list discussions, trainings, conference talks, meetup
organization, and other activities.
Special thanks go to our fellow Flink committers: Alan Gates,
Aljoscha Krettek, Andra Lungu, ChengXiang Li, Chesnay Schepler,
Chiwan Park, Daniel Warneke, Dawid Wysakowicz, Gary Yao, Greg
Hogan, Gyula Fóra, Henry Saputra, Jamie Grier, Jark Wu, Jincheng
Sun, Konstantinos Kloudas, Kostas Tzoumas, Kurt Young, Márton
Balassi, Matthias J. Sax, Maximilian Michels, Nico Kruber, Paris
Carbone, Robert Metzger, Sebastian Schelter, Shaoxuan Wang, Shuyi
Chen, Stefan Richter, Stephan Ewen, Theodore Vasiloudis, Thomas
Weise, Till Rohrmann, Timo Walther, Tzu-Li (Gordon) Tai, Ufuk
Celebi, Xiaogang Shi, Xiaowei Jiang, Xingcan Cui. With this book, we
hope to reach developers, engineers, and streaming enthusiasts
around the world and grow the Flink community even larger.
We’ve also like to thank our technical reviewers who made countless
valuable suggestions helping us to improve the presentation of the
content. Thank you, Adam Kawa, Aljoscha Krettek, Kenneth
Knowles, Lea Giordano, Matthias J. Sax, Stephan Ewen, Ted
Malaska, and Tyler Akidau.
Finally, we say a big thank you to all the people at O’Reilly who
accompanied us on our two and a half year long journey and helped
us to push this project over the finish line. Thank you, Alicia Young,
Colleen Lobner, Christina Edwards, Katherine Tozer, Marie
Beaugureau, and Tim McGovern.
Chapter 1. Introduction to
Stateful Stream Processing

Apache Flink is a distributed stream processor with intuitive and


expressive APIs to implement stateful stream processing
applications. It efficiently runs such applications at large scale in a
fault-tolerant manner. Flink joined the Apache Software Foundation
as an incubating project in April 2014 and became a top-level project
in January 2015. Since its beginning, Flink has had a very active and
continuously growing community of users and contributors. To date,
more than five hundred individuals have contributed to Flink, and it
has evolved into one of the most sophisticated open source stream
processing engines as proven by its widespread adoption. Flink
powers large-scale, business-critical applications in many companies
and enterprises across different industries and around the globe.
Stream processing technology is becoming more and more popular
with companies big and small because it provides superior solutions
for many established use cases such as data analytics, ETL, and
transactional applications, but also facilitates novel applications,
software architectures, and business opportunities. In this chapter,
we discuss why stateful stream processing is becoming so popular
and assess its potential. We start by reviewing conventional data
application architectures and point out their limitations. Next, we
introduce application designs based on stateful stream processing
that exhibit many interesting characteristics and benefits over
traditional approaches. Finally, we briefly discuss the evolution of
open source stream processors and help you run a streaming
application on a local Flink instance.
Traditional Data Infrastructures
Data and data processing have been omnipresent in businesses for
many decades. Over the years the collection and usage of data has
grown consistently, and companies have designed and built
infrastructures to manage that data. The traditional architecture that
most businesses implement distinguishes two types of data
processing: transactional processing and analytical processing. In
this section, we discuss both types and how they manage and
process data.

Transactional Processing
Companies use all kinds of applications for their day-to-day business
activities, such as enterprise resource planning (ERP) systems,
customer relationship management (CRM) software, and web-based
applications. These systems are typically designed with separate
tiers for data processing (the application itself) and data storage (a
transactional database system) as shown in Figure 1-1.

Figure 1-1. Traditional design of transactional applications that store data in a


remote database system

Applications are usually connected to external services or face


human users and continuously process incoming events such as
orders, email, or clicks on a website. When an event is processed,
an application reads its state or updates it by running transactions
against the remote database system. Often, a database system
serves multiple applications that sometimes access the same
databases or tables.
This application design can cause problems when applications need
to evolve or scale. Since multiple applications might work on the
same data representation or share the same infrastructure, changing
the schema of a table or scaling a database system requires careful
planning and a lot of effort. A recent approach to overcoming the
tight bundling of applications is the microservices design pattern.
Microservices are designed as small, self-contained, and independent
applications. They follow the UNIX philosophy of doing a single thing
and doing it well. More complex applications are built by connecting
several microservices with each other that only communicate over
standardized interfaces such as RESTful HTTP connections. Because
microservices are strictly decoupled from each other and only
communicate over well-defined interfaces, each microservice can be
implemented with a different technology stack including a
programming language, libraries, and datastores. Microservices and
all the required software and services are typically bundled and
deployed in independent containers. Figure 1-2 depicts a
microservices architecture.
Figure 1-2. A microservices architecture

Analytical Processing
The data that is stored in the various transactional database systems
of a company can provide valuable insights about a company’s
business operations. For example, the data of an order processing
system can be analyzed to obtain sales growth over time, to identify
reasons for delayed shipments, or to predict future sales in order to
adjust the inventory. However, transactional data is often distributed
across several disconnected database systems and is more valuable
when it can be jointly analyzed. Moreover, the data often needs to
be transformed into a common format.
Instead of running analytical queries directly on the transactional
databases, the data is typically replicated to a data warehouse, a
dedicated datastore for analytical query workloads. In order to
populate a data warehouse, the data managed by the transactional
database systems needs to be copied to it. The process of copying
data to the data warehouse is called extract–transform–load (ETL).
An ETL process extracts data from a transactional database,
transforms it into a common representation that might include
validation, value normalization, encoding, deduplication, and schema
transformation, and finally loads it into the analytical database. ETL
processes can be quite complex and often require technically
sophisticated solutions to meet performance requirements. ETL
processes need to run periodically to keep the data in the data
warehouse synchronized.
Once the data has been imported into the data warehouse it can be
queried and analyzed. Typically, there are two classes of queries
executed on a data warehouse. The first type are periodic report
queries that compute business-relevant statistics such as revenue,
user growth, or production output. These metrics are assembled into
reports that help the management to assess the business’s overall
health. The second type are ad-hoc queries that aim to provide
answers to specific questions and support business-critical decisions,
for example a query to collect revenue numbers and spending on
radio commercials to evaluate the effectiveness of a marketing
campaign. Both kinds of queries are executed by a data warehouse
in a batch processing fashion, as shown in Figure 1-3.

Figure 1-3. A traditional data warehouse architecture for data analytics

Today, components of the Apache Hadoop ecosystem are integral


parts in the IT infrastructures of many enterprises. Instead of
inserting all data into a relational database system, significant
amounts of data, such as log files, social media, or web click logs,
are written into Hadoop’s distributed filesystem (HDFS), S3, or other
bulk datastores, like Apache HBase, which provide massive storage
capacity at a small cost. Data that resides in such storage systems
can be queried with and processed by a SQL-on-Hadoop engine, for
example Apache Hive, Apache Drill, or Apache Impala. However, the
infrastructure remains basically the same as a traditional data
warehouse architecture.

Stateful Stream Processing


Virtually all data is created as continuous streams of events. Think of
user interactions on websites or in mobile apps, placements of
orders, server logs, or sensor measurements; all of these are
streams of events. In fact, it is difficult to find examples of finite,
complete datasets that are generated all at once. Stateful stream
processing is an application design pattern for processing
unbounded streams of events and is applicable to many different use
cases in the IT infrastructure of a company. Before we discuss its
use cases, we briefly explain how stateful stream processing works.
Any application that processes a stream of events and does not just
perform trivial record-at-a-time transformations needs to be stateful,
with the ability to store and access intermediate data. When an
application receives an event, it can perform arbitrary computations
that involve reading data from or writing data to the state. In
principle, state can be stored and accessed in many different places
including program variables, local files, or embedded or external
databases.
Apache Flink stores the application state locally in memory or in an
embedded database. Since Flink is a distributed system, the local
state needs to be protected against failures to avoid data loss in
case of application or machine failure. Flink guarantees this by
periodically writing a consistent checkpoint of the application state to
a remote and durable storage. State, state consistency, and Flink’s
checkpointing mechanism will be discussed in more detail in the
following chapters, but, for now, Figure 1-4 shows a stateful
streaming Flink application.

Figure 1-4. A stateful streaming application

Stateful stream processing applications often ingest their incoming


events from an event log. An event log stores and distributes event
streams. Events are written to a durable, append-only log, which
means that the order of written events cannot be changed. A stream
that is written to an event log can be read many times by the same
or different consumers. Due to the append-only property of the log,
events are always published to all consumers in exactly the same
order. There are several event log systems available as open source
software, Apache Kafka being the most popular, or as integrated
services offered by cloud computing providers.
Connecting a stateful streaming application running on Flink and an
event log is interesting for multiple reasons. In this architecture the
event log persists the input events and can replay them in
deterministic order. In case of a failure, Flink recovers a stateful
streaming application by restoring its state from a previous
checkpoint and resetting the read position on the event log. The
application will replay (and fast forward) the input events from the
event log until it reaches the tail of the stream. This technique is
used to recover from failures but can also be leveraged to update an
application, fix bugs and repair previously emitted results, migrate
an application to a different cluster, or perform A/B tests with
different application versions.
As previously stated, stateful stream processing is a versatile and
flexible design architecture that can be used for many different use
cases. In the following, we present three classes of applications that
are commonly implemented using stateful stream processing: (1)
event-driven applications, (2) data pipeline applications, and (3) data
analytics applications.

REAL-WORLD STREAMING USE-CASES AND


DEPLOYMENTS
If you are interested in learning more about real-world use cases and
deployments, check out Apache Flink’s Powered By page and the talk
recordings and slide decks of Flink Forward presentations.

We describe the classes of applications as distinct patterns to


emphasize the versatility of stateful stream processing, but most
real-world applications share the properties of more than one class.
Event-Driven Applications
Event-driven applications are stateful streaming applications that
ingest event streams and process the events with application-specific
business logic. Depending on the business logic, an event-driven
application can trigger actions such as sending an alert or an email
or write events to an outgoing event stream to be consumed by
another event-driven application.
Typical use cases for event-driven applications include:

Real-time recommendations (e.g., for recommending


products while customers browse a retailer’s website)
Pattern detection or complex event processing (e.g., for
fraud detection in credit card transactions)
Anomaly detection (e.g., to detect attempts to intrude a
computer network)

Event-driven applications are an evolution of microservices. They


communicate via event logs instead of REST calls and hold
application data as local state instead of writing it to and reading it
from an external datastore, such as a relational database or key-
value store. Figure 1-5 shows a service architecture composed of
event-driven streaming applications.
Figure 1-5. An event-driven application architecture

The applications in Figure 1-5 are connected by event logs. One


application emits its output to an event log and another application
consumes the events the other application emitted. The event log
decouples senders and receivers and provides asynchronous,
nonblocking event transfer. Each application can be stateful and can
locally manage its own state without accessing external datastores.
Applications can also be individually operated and scaled.
Event-driven applications offer several benefits compared to
transactional applications or microservices. Local state access
provides very good performance compared to reading and writing
queries against remote datastores. Scaling and fault tolerance are
handled by the stream processor, and by leveraging an event log as
the input source the complete input of an application is reliably
stored and can be deterministically replayed. Furthermore, Flink can
reset the state of an application to a previous savepoint, making it
possible to evolve or rescale an application without losing its state.
Event-driven applications have quite high requirements on the
stream processor that runs them. Not all stream processors are
equally well-suited to run event-driven applications. The
expressiveness of the API and the quality of state handling and
event-time support determine the business logic that can be
implemented and executed. This aspect depends on the APIs of the
stream processor, what kinds of state primitives it provides, and the
quality of its support for event-time processing. Moreover, exactly-
once state consistency and the ability to scale an application are
fundamental requirements for event-driven applications. Apache
Flink checks all these boxes and is a very good choice to run this
class of applications.

Data Pipelines
Today’s IT architectures include many different datastores, such as
relational and special-purpose database systems, event logs,
distributed filesystems, in-memory caches, and search indexes. All of
these systems store data in different formats and data structures
that provide the best performance for their specific access pattern. It
is common that companies store the same data in multiple different
systems to improve the performance of data accesses. For example,
information for a product that is offered in a webshop can be stored
in a transactional database, a web cache, and a search index. Due to
this replication of data, the data stores must be kept in sync.
A traditional approach to synchronize data in different storage
systems is periodic ETL jobs. However, they do not meet the latency
requirements for many of today’s use cases. An alternative is to use
an event log to distribute updates. The updates are written to and
distributed by the event log. Consumers of the log incorporate the
updates into the affected data stores. Depending on the use case,
the transferred data may need to be normalized, enriched with
external data, or aggregated before it is ingested by the target data
store.
Ingesting, transforming, and inserting data with low latency is
another common use case for stateful stream processing
applications. This type of application is called a data pipeline. Data
pipelines must be able to process large amounts of data in a short
time. A stream processor that operates a data pipeline should also
feature many source and sink connectors to read data from and
write data to various storage systems. Again, Flink does all of this.

Streaming Analytics
ETL jobs periodically import data into a datastore and the data is
processed by ad-hoc or scheduled queries. This is batch processing
regardless of whether the architecture is based on a data warehouse
or components of the Hadoop ecosystem. While periodically loading
data into a data analysis system has been the state of the art for
many years, it adds considerable latency to the analytics pipeline.
Depending on the scheduling intervals it may take hours or days
until a data point is included in a report. To some extent, the latency
can be reduced by importing data into the datastore with a data
pipeline application. However, even with continuous ETL there will
always be a delay until an event is processed by a query. While this
kind of delay may have been acceptable in the past, applications
today must be able to collect data in real-time and immediately act
on it (e.g., by adjusting to changing conditions in a mobile game or
by personalizing user experiences for an online retailer).
Instead of waiting to be periodically triggered, a streaming analytics
application continuously ingests streams of events and updates its
result by incorporating the latest events with low latency. This is
similar to the maintenance techniques database systems use to
update materialized views. Typically, streaming applications store
their result in an external data store that supports efficient updates,
such as a database or key-value store. The live updated results of a
streaming analytics application can be used to power dashboard
applications as shown in Figure 1-6.
Figure 1-6. A streaming analytics application

Besides the much shorter time needed for an event to be


incorporated into an analytics result, there is another, less obvious,
advantage of streaming analytics applications. Traditional analytics
pipelines consist of several individual components such as an ETL
process, a storage system, and in the case of a Hadoop-based
environment, a data processor and scheduler to trigger jobs or
queries. In contrast, a stream processor that runs a stateful
streaming application takes care of all these processing steps,
including event ingestion, continuous computation including state
maintenance, and updating the results. Moreover, the stream
processor can recover from failures with exactly-once state
consistency guarantees and can adjust the compute resources of an
application. Stream processors like Flink also support event-time
processing to produce correct and deterministic results and the
ability to process large amounts of data in little time.
Streaming analytics applications are commonly used for:
Monitoring the quality of cellphone networks
Analyzing user behavior in mobile applications
Ad-hoc analysis of live data in consumer technology

Although we don’t cover it here, Flink also provides support for


analytical SQL queries over streams.

The Evolution of Open Source Stream


Processing
Data stream processing is not a novel technology. Some of the first
research prototypes and commercial products date back to the late
1990s. However, the growing adoption of stream processing
technology in the recent past has been driven to a large extent by
the availability of mature open source stream processors. Today,
distributed open source stream processors power business-critical
applications in many enterprises across different industries such as
(online) retail, social media, telecommunication, gaming, and
banking. Open source software is a major driver of this trend, mainly
due to two reasons:

1. Open source stream processing software is a commodity that


everybody can evaluate and use.
2. Scalable stream processing technology is rapidly maturing
and evolving due to the efforts of many open source
communities.
The Apache Software Foundation alone is the home of more than a
dozen projects related to stream processing. New distributed stream
processing projects are continuously entering the open source stage
and are challenging the state of the art with new features and
capabilities. Open source communities are constantly improving the
capabilities of their projects and are pushing the technical
boundaries of stream processing. We will take a brief look into the
past to see where open source stream processing came from and
where it is today.

A Bit of History
The first generation of distributed open source stream processors
(2011) focused on event processing with millisecond latencies and
provided guarantees against loss of events in the case of failures.
These systems had rather low-level APIs and did not provide built-in
support for accurate and consistent results of streaming applications
because the results depended on the timing and order of arriving
events. Moreover, even though events were not lost, they could be
processed more than once. In contrast to batch processors, the first
open source stream processors traded result accuracy for better
latency. The observation that data processing systems (at this point
in time) could either provide fast or accurate results led to the
design of the so-called lambda architecture, which is depicted in
Figure 1-7.

Figure 1-7. The lambda architecture

The lambda architecture augments the traditional periodic batch


processing architecture with a speed layer that is powered by a low-
latency stream processor. Data arriving at the lambda architecture is
ingested by the stream processor and also written to batch storage.
The stream processor computes approximated results in near real
time and writes them into a speed table. The batch processor
periodically processes the data in batch storage, writes the exact
results into a batch table, and drops the corresponding inaccurate
results from the speed table. Applications consume the results by
merging approximated results from the speed table and the accurate
results from the batch table.
The lambda architecture is no longer state of the art, but is still used
in many places. The original goals of this architecture were to
improve the high result latency of the original batch analytics
architecture. However, it has a few notable drawbacks. First of all, it
requires two semantically equivalent implementations of the
application logic for two separate processing systems with different
APIs. Second, the results computed by the stream processor are
only approximate. Third, the lambda architecture is hard to set up
and maintain.
Improving on the first generation, the next generation of distributed
open source stream processors (2013) provided better failure
guarantees and ensured that in case of a failure each input record
affects the result exactly once. In addition, programming APIs
evolved from rather low-level operator interfaces to high-level APIs
with more built-in primitives. However, some improvements such as
higher throughput and better failure guarantees came at the cost of
increasing processing latencies from milliseconds to seconds.
Moreover, results were still dependent on timing and order of
arriving events.
The third generation of distributed open source stream processors
(2015) addressed the dependency of results on the timing and order
of arriving events. In combination with exactly-once failure
semantics, systems of this generation are the first open source
stream processors capable of computing consistent and accurate
results. By only computing results based on actual data, these
systems are also able to process historical data in the same way as
“live” data. Another improvement was the dissolution of the
latency/throughput tradeoff. While previous stream processors only
provide either high throughput or low latency, systems of the third
generation are able to serve both ends of the spectrum. Stream
processors of this generation made the lambda architecture
obsolete.
In addition to the system properties discussed so far, such as failure
tolerance, performance, and result accuracy, stream processors have
also continuously added new operational features such as highly
available setups, tight integration with resource managers, such as
YARN or Kubernetes, and the ability to dynamically scale streaming
applications. Other features include support to upgrade application
code or migrate a job to a different cluster or a new version of the
stream processor without losing the current state.

A Quick Look at Flink


Apache Flink is a third-generation distributed stream processor with
a competitive feature set. It provides accurate stream processing
with high throughput and low latency at scale. In particular, the
following features make Flink stand out:
Event-time and processing-time semantics. Event-time
semantics provide consistent and accurate results despite
out-of-order events. Processing-time semantics can be used
for applications with very low latency requirements.
Exactly-once state consistency guarantees.
Millisecond latencies while processing millions of events per
second. Flink applications can be scaled to run on thousands
of cores.
Layered APIs with varying tradeoffs for expressiveness and
ease of use. This book covers the DataStream API and
process functions, which provide primitives for common
stream processing operations, such as windowing and
asynchronous operations, and interfaces to precisely control
state and time. Flink’s relational APIs, SQL and the LINQ-
style Table API, are not discussed in this book.
Connectors to the most commonly used storage systems
such as Apache Kafka, Apache Cassandra, Elasticsearch,
JDBC, Kinesis, and (distributed) filesystems such as HDFS
and S3.
Ability to run streaming applications 24/7 with very little
downtime due to its highly available setup (no single point of
failure), tight integration with Kubernetes, YARN, and
Apache Mesos, fast recovery from failures, and the ability to
dynamically scale jobs.
Ability to update the application code of jobs and migrate
jobs to different Flink clusters without losing the state of the
application.
Detailed and customizable collection of system and
application metrics to identify and react to problems ahead
of time.
Last but not least, Flink is also a full-fledged batch
processor.1
In addition to these features, Flink is a very developer-friendly
framework due to its easy-to-use APIs. The embedded execution
mode starts an application and the whole Flink system in a single
JVM process, which can be used to run and debug Flink jobs within
an IDE. This feature comes in handy when developing and testing
Flink applications.

Running Your First Flink Application


In the following, we will guide you through the process of starting a
local cluster and executing a streaming application to give you a first
look at Flink. The application we are going to run converts and
aggregates randomly generated temperature sensor readings by
time. For this example, your system needs Java 8 installed. We
describe the steps for a UNIX environment, but if you are running
Windows, we recommend setting up a virtual machine with Linux,
Cygwin (a Linux environment for Windows), or the Windows
Subsystem for Linux, introduced with Windows 10. The following
steps show you how to start a local Flink cluster and submit an
application for execution.
1. Go to the Apache Flink webpage and download the Hadoop-
free binary distribution of Apache Flink 1.7.1 for Scala 2.12.
2. Extract the archive file:

$ tar xvfz flink-1.7.1-bin-scala_2.12.tgz

3. Start a local Flink cluster:

$ cd flink-1.7.1
$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host xxx.
Starting taskexecutor daemon on host xxx.

4. Open Flink’s Web UI by entering the URL


http://localhost:8081 in your browser. As shown in
Figure 1-8, you will see some statistics about the local Flink
cluster you just started. It will show that a single
TaskManager (Flink’s worker processes) is connected and
that a single task slot (resource units provided by a
TaskManager) is available.
Other documents randomly have
different content
päivää ennen häitäni, ja lisäksi noin liikuttavassa muodossa! Oi,
jospa tietäisit, millä mielellä olin silloin kun tein lopun kaikesta! Jo
ensi kohtauksestamme saakka varoitti joku ääni rinnassani minua, ja
minun täytyy sanoa puolustuksekseni, että kauan varoin
antautumasta lumouksen valtaan. Tavatessasi meidät Rue Molièren
varrella sijaitsevassa asunnossamme olimme me vasta neljätoista
päivää asuneet siten yhdessä, mutta jo kaksi kuukautta sitä ennen
olimme me ensi kerran nähneet toisemme. Se tapahtui Champs-
Elyséessa; minä kuljin parin ystäväni kanssa ja näin hänen istuvan
eräällä penkillä, pitäen polvillaan koria, jossa oli orvokkikimppuja.
Huomioni kiintyi heti noihin ulkomaalaisiin kasvoihin ja niiden
outoihin itämaalaisiin piirteisiin, ja minä menin, välittämättä toisten
pilasta, kysymään häneltä, minkä ihmeellisen sattuman kautta hän
oli joutunut Parisiin. Kun hän katsahti suurilla, surullisilla silmillään
minuun, jouduin heti oudon osanoton tunteen valtaan, joka tunne
kehoitti minua suojelemaan häntä, sillä hänen kasvoistaan huomasi
selvästi hänet onnettomaksi. Mutta samalla kertaa esti joku
voimakkaampi voima minut selvästi osoittamasta, mitä tunsin. Kysyin
häneltä vain kukkakimppua ostaessani hänen nimeään. 'Kleopatra',
vastasi hän tuolla äänellä, jonka laadun kyllä itsekin tunnet. Toiset
puhuivat hänelle kaikkea joutavaa, mutta heihin nähden käyttäytyi
hän kuin ei olisi osannut ainoatakaan sanaa ranskaa. Sen sijaan oli
hänen katseensa lakkaamatta kiintynyt minuun, ja kun läksimme
jatkamaan matkaamme ja minä hetkisen kuluttua sattumalta
katsahdin taaksemme, huomasin hänen seuraavan meitä koriansa
käsivarrellaan kantaen pitkillä, rauhallisilla askeleilla, jotka
parisitarten sipsuttaviin ja tanssiviin askeleisiin verrattuina tekivät
hänen uljaan vartalonsa yhä valtavammaksi.

"Viimein katosi hän näkyvistäni, ja iltapäivävierailujen aikana en


enää muistanut häntä ollenkaan. Tiedäthän, kuinka Parisissa yksi
vaikutelma ajaa toisen tieltään, ja minä olin ollut siellä vielä tuskin
viikkoakaan. Kun illalla palasin asuntooni, näin hänet jälleen sadan
askeleen päässä takanani. Katsoin silloin sekä hänen että itseni takia
velvollisuudekseni saada selvä tuosta omituisesta tapahtumasta.
Palasin siis kadulle, ja kun hän jälleen asettui lähelleni, ikään kuin
olisi aikonut seurata minua koko päivän, menin suoraan hänen
luoksensa ja sanoin hänelle niin epäystävällisellä äänellä kuin
mahdollista: 'Luullakseni maksoin ostamani kukkaset. Miksi kuljet
lakkaamatta perässäni? Minä en tahdo sinun seuraasi enkä
muutenkaan tahdo tietää mitään sinusta, mutta ettet turhaan olisi
kuluttanut aikaasi — kas tässä näin!' Heitin viisi frangia hänen
koriinsa ja kiiruhdin pois, sillä tunsin hänen kasvojensa hiljaisen
ilmeen käyvän yhä enemmän sydämelleni. Näin nyt, kuinka hän,
nähtävästi tahdottomasti totellen, poistui pää alas painuneena, ja
minun täytyi ponnistaa kaikki itsehillitsemiskykyni estyäkseni
huutamasta häntä takaisin. Siitä huolimatta tunsin itseni
tyytyväiseksi päästessäni niin vähällä tuosta jutusta; sillä kaikenlaiset
kertomukset tapahtumista, joita oli sattunut ystävilleni heidän
joutuessaan houkutuslintujen viekkaasti virittämiin ansoihin, olivat
vielä tuoreessa muistissani.

"Kului pari viikkoa, ennen kuin uudelleen näin hänet. Alussa


muistelin kyllä häntä usein, mutta sitten aloin vähitellen unhoittaa
hänen piirteensä. Kun eräänä aamuna tavallista aikaisemmin astuin
alas portaita, huomasin eteisessä portinvartijan huoneen edessä
koko talon palvelijatarlauman kerääntyneen jonkun naisolennon
ympärille, joka oli vaipunut tuolille ja jonka pää oli vajonnut niin alas
rintaa vasten, etten voinut eroittaa hänen kasvonpiirteitään. Kuulin,
että hänet oli löydetty varhain aamulla talon portin edessä
tainnostilassa, josta hän ei ollut vieläkään täysin herännyt. Hän oli
nähtävästi maannut siinä aina puoliyöstä saakka, sillä hänen
vaatteensa olivat sateesta aivan läpimärät, ja paikka, jossa hän oli
maannut, oli ollut kuiva.

"Astuessani lähemmäksi kohotti pyörtynyt erään avuliaan


palvelijattaren tukemana hieman päätään, ja kauhistuen huomasin
nyt, kuka hän oli. Vähitellen näytti hän palaavan tuntoihinsa, sillä
minut nähdessään hän, nähtävästi muistaen, miten ankarasti olin
kohdellut häntä viimeksi tavatessamme toisemme, vavahti ja
rauhoittui vasta minun astuessani hänen viereensä ja kysyessäni
häneltä, luonnollisesti kuin olisi hän ollut minulle aivan vieras, mitä
hänelle oli tapahtunut. 'Ei mitään', vastasi hän koittaen hymyillä ja
muuttuen yht'äkkiä kauniiksi kuin kesäinen päivä. Ympärillämme
seisovat säälijät kuiskailivat toisilleen ihmettelynsä tuosta
muutoksesta. 'Hänellä on varmaankin nälkä', sanoi muuan
palvelijatar. 'Hänelle täytyy hankkia kupillinen lihalientä ja antaa
hänen muuttaa päällensä kuivat vaatteet.' Minä käskin heti
laittamaan hänelle aamiaisen ja kysyin portinvartijattarelta, voisiko
hän maksua vastaan pitää toistaiseksi huolta tuosta tyttöraukasta.
Nähtyäni että pari kulausta voimakasta lihalientä oli palauttanut
tytön horjuvat elinvoimat entiselleen, läksin toimiini ja jätin hänet
portinvartijattaren hoidettavaksi.

"Ymmärtänethän, että sydämeni tykytti tavallista kiivaammin


palatessani päivällisaikaan jälleen asuntooni. Hän istui
portinvartijattaren huoneessa pöydän ääressä nähtävästi täysin
toipuneena; hänellä oli emäntänsä pienin lapsi polvillaan, ja hän laski
sen minun sisään astuessa nopeasti takaisin kehtoon nousten itse
alistuvaisesti ylös, aivan kuin olisi odottanut minun ajavan hänet
ulos. Portinvartijatar kertoi hänen toipuneen vasta ruokaa saatuaan,
sitte kolmeen päivään ei hän ollut syönyt mitään muuta kuin kaksi
pientä leipää. Kysyin nyt tytöltä, kuinka hän oli joutunut tuollaiseen
kurjuuteen, ja kuuntelin epäillen hänen surullista kertomustaan.
Hänen isänsä oli ollut ranskalainen insinööri, joka oli kauan ollut
Egyptin varakuninkaan palveluksessa ja viimein mennyt naimisiin
erään arabiattaren kanssa. Hänellä oli ollut useita sisaria, mutta he
olivat kaikki kuolleet kuumetautiin, ja viimein oli äitikin painunut
haudanpoveen. Isä oli silloin eronnut toimestaan, ettei tarvitsisi
haudata vieraaseen maahan viimeistäkin lastansa ja tuonut hänet
kymmen-vuotisena tyttönä mukanaan Parisiin. Siellä oli hän
useampia vuosia elänyt huoletonta elämää, ja kun hän kahden
vuoden kuluttua oli kuollut, oli hänen pieni omaisuutensa huvennut
kokonaan hautauskustannuksiin. He olivat asuneet eräässä
esikaupungissa erään puutarhurin talossa, ja puutarhuri oli säälien
antanut orvon lapsi-raukan jäädä taloon, sillä hän itse oli lapseton.
Alussa oli hänen siellä hyvä olla, ja hänen tehtävänään oli
puutarhurin kukkasten myyminen; mutta jonkun ajan kuluttua rupesi
puutarhurin vaimo kohtelemaan häntä ilkeästi. Hänen
kertomuksestaan voin helposti päättää, että puutarhurin vaimo oli
mustasukkainen tuolle pienelle tytölle ja tästä syystä aikaansai usein
talossa kiivaita kohtauksia. Vihdoin vaati hän, että tytön täytyisi
lähteä tiehensä talosta. Sen jälkeen oli tyttö kierrellyt siellä täällä
kaupungilla omaamatta kattoa päänsä päällä, oli pian kuluttanut
omistamansa lantit ja vihdoin nälästä ja väsymyksestä melkein
nääntyneenä laskeutunut porttini ulkopuolelle, aivan kuin koko
maailmassa ei olisi voinut löytää parempaa turvapaikkaa.

"Minä kuuntelin tuota hänen kertomustaan, niinkuin edellä


mainitsin, jokseenkin epäluuloisena, tahi paremminkin, minä koitin
turvautua teennäiseen epäluuloon, sillä tunsin tuon lapsiraukan
kohtalon käyvän yhä enemmän sydämelleni. Kysellessäni vielä
samana päivänä asiaa puutarhurin naapureilta esikaupungissa, sain
tietää, että kaikki oli juuri niin kuin hän oli kertonut, ettei kukaan
voinut sanoa mitään pahaa tuosta kiltistä tytöstä, että hän kohteli
kaikkia nuoria miehiä kylmästi ja välinpitämättömästi ja ettei hän
puutarhurin talossa ollut tehnyt muuta rikosta, kuin että oli ollut
nuorempi ja kauniimpi kuin talon rouva.

"Mitä oli tehtävä? Portinvartijatar, joka oli aivan rakastunut


suojattiinsa, olisi mielellään pitänyt hänet luonaan, koska lapsetkin
olivat sangen ihastuneita häneen, eikä hänen miehellään ollut
mitään muuta intohimoa kuin juoppous. Mutta minä pelkäsin itseni
takia, jos joutuisin asumaan saman katon alle kuin hän, ja niin tein
päätöksen, joka tuotti itsellenikin tuskaa, viedä hänet toiseen ääreen
Parisia erään vanhan ja kunniallisen muotikauppiaan luo, jota
luotettavalta taholta oli suositettu minulle kunnioitettavana rouvana.
Siellä saisi hän oppia kaikenlaisia naistöitä, joita hän ei siihen saakka
lainkaan tuntenut. Hänen tulevalta holhoojaltaan otin sitäpaitsi
lupauksen, että häntä pidettäisiin ankarassa kurissa, mutta ei
asetettaisi seisomaan myymäläpöydän taakse, sillä silloin voisi hän
kauneutensa ja kokemattomuutensa takia joutua jonkun
kevytmielisen tyhjäntoimittajan uhriksi.

"Kun ilmoitin hänelle tämän päätöksen, ei hän pienimmälläkään


ilmeellään osoittanut, oliko se hänelle mieleinen tahi vastenmielinen.
Yleensä oli hänen käytöksessään jonkunmoista unelmoivaa
tahdottomuutta, joka vähitellen tukahdutti ensi katseella hänen
herättämäänsä mielenkiintoa; näytti kuin olisi sielu vielä nukkunut
tuossa kauniissa ruumiissa tahi ollut voimaton ilmaisemaan
innokkaammin vaikutelmiaan. Siksipä jokseenkin kylmän mielialan
vallitessa sielussani katselin, kuinka hän portinvartijattaren kanssa
nousi vuokravaunuihin kelpo madame Larivièren luo mennäkseen ja
toivoin todenteolla jutun loppuvan tähän ja vain muotikauppiaan
kuukausilaskujen vast'edes muistuttavan minua hänen
olemassaolostaan.

"Niin kului suunnilleen kolme viikkoa, ja minä vastustin


menestyksellisesti kiusausta mennä häntä katsomaan ja tapaamaan.
Viimein muistelin häntä jokseenkin rauhallisesti, melkeinpä kuin
jotakin Horack Vernetin Smahlaa, ja ylistin viisauttani, jonka avulla
olin niin pian päässyt tuosta arveluttavasta seikkailusta.

"Minä olin kuitenkin erehtynyt suuresti.

"Kun eräänä iltana mitään aavistamatta saavuin asuntooni, löysin


pienen paperilippusen pöydältäni. Se oli huonosti kääritty kokoon ja
osoite kirjoitettu suurilla, epätasaisilla kirjaimilla. Aavistin heti jotakin
onnettomuutta! ja aivan oikein, se oli hänen käsialaansa eikä
sisältänyt mitään muuta kuin tuskanhuudon: 'Noutakaa minut heti
pois täältä — minä tukehdun täällä — minulta ei puutu mitään,
mutta minä kuolen, jos minun täytyy jäädä tänne!…' Kaiken
kaikkiaan viisi, kuusi riviä, mutta jokainen niistä mitä suurinta
epätoivoa uhkuva.

"Huomannet aivan luonnolliseksi, että minä, lähettämättä


kirjeellistä moralisaarnaa, heti ajoin madame Larivièren luo. Tuo
kelpo nainen avasi itse minulle oven ja näytti sangen suuresti
iloitsevan tulostani, vaikkakaan hänellä ei ollut aavistustakaan
Kleopatran minulle lähettämästä kirjeestä. 'Aioin juuri tänään
kirjoittaa teille', sanoi hän astuessani eteiseen ja kysellessäni hänen
hoidokkaastaan. 'Näyttää kuin ei kaikki olisi aivan oikein tuon lapsi-
raukan suhteen. Hän ei valita mitään, tekee mitä hänen käsketään
tehdä, työskentelee, tosin avuttomasti mutta ahkerasti, ja riutuu
päivä päivältä yhä enemmän, niin että on aivan sääli nähdä, kuinka
laihaksi hän on tullut ja kuinka hänen silmänsä ovat kadottaneet
kaiken loistonsa. Hän syö tuskin palastakaan koko päivänä, ja
luulenpa, ettei hän öisin nuku neljääkään tuntia. Kun kysyn,
puuttuuko häneltä mitään, pudistelee hän vain päätään. Työläisteni
joukossa on joukko huimapäisiä ja iloisia grisettejä. Väliin kajahtelee
koko sali heidän naurustaan, mutta Virginie — me nimitämme häntä
siksi, koska hänen toinen nimensä kuuluu niin pakanalliselta — istuu
heidän joukossaan suutansakaan avaamatta, vaikka hänen
hampaansa kyllä olisivat katsomisen arvoiset. Tyttöni vakuuttavat,
että hän on rakastunut. Kysyin häneltä kerran sitä seikkaa, mutta
silloin katsoi hän minuun aivan samalla tavoin kuin olisi katsonut, jos
olisin kysynyt häneltä, oliko hän tehnyt väärän sadan frangin setelin.

"Huomautin nyt, että häneltä kenties puuttui liikuntoa, mutta niin


ei ollut asianlaita, sillä hän kävi joka ilta ulkona madamen kanssa,
tämän käydessä asioillaan; luonnollisesti oli hän tällöin tiheästi
hunnutettu. Myöskin oli hän ollut mukana eräällä maalle tehdyllä
retkeilyllä, mutta hänessä ei siitä huolimatta oltu huomattu mitään
muutosta.

"Pyysin saada nähdä hänet ja tapasinkin hänet suuressa


työhuoneessa, jossa työ oli jo loppunut. Hän istui akkunan ääressä
erään talossa asuvan vanhemman naisen seurassa. Nähdessään
minut nousi hän ylös. Kun ojensin käteni hänelle ja kysyin, kuinka
hän voi, vapisi hän ja vastasi vain päännyökäyksellä. Pyysin hänen
noutamaan hattunsa ja sharlinsa ja sanoin tulleeni hakemaan hänet
kävelylle. Nyt kiiruhti hän hätäisesti noutamaan päällysvaatteensa,
syleili madamea ja seurasi sitten, yhäti punastellen, perässäni pitkin
kaitoja portaita alas kadulle.

"Koitin nyt, hänen höyhenkevyesti pitäessään kiinni käsivarrestani,


ystävällisin sanoin kysellä häneltä, oliko hänellä jotakin valittelemista
osakseen saamastaan kohtelusta madame Larivièren talossa. Ei,
häntä oli kohdeltu tavattoman hyvin. Kysyin sitten, ikävöikö hän
takaisin syntymämaahansa ja halusiko hän, että lähettäisin hänet
Alexandriaan. Kysymykseni kuullessaan pudisti hän kiivaasti päätään
kyyneleiden välkkyessä hänen silmissään. Voinethan ajatella,
millaiseksi tällöin tunsin mielialani. Ja kun lopuksi pyysin häntä vielä
kerran palaamaan madame Larivièren taloon, jossa hän lopulta
huomaisi kaiken kääntyvän parhain päin, pysähtyi hän äkkiä, hänen
kasvonsa muuttuivat aivan värittömiksi, ja raskaasti hengittäen sanoi
hän: 'Ennen voitte heti tappaa minut! Minä en voi enää kauempaa
elää sillä tavoin!'

"Nyt olivat hyvät neuvot tarpeen. Rauhoittaakseni häntä vein


hänet erääseen maison garnie'hen, jota hoiti muuan kunnioitettava
saksalainen pariskunta. 'Täällä saat nukkua tämän yön, Virginia',
sanoin hänelle jäädessämme kahdenkesken tilaamaani pieneen,
sievään huoneeseen. 'Aamulla tulen luoksesi, ja silloin voimme
miettiä, mitä on tehtävä, sillä koska vastustat madamen luo
palaamista, niin enhän voi sinua siihen pakoittaakaan. Hyvää yötä
nyt, lapsiraukka!'

"Ojensin hänelle käteni ja aioin poistua, mutta nähdessäni hänen


seisovan siinä edessäni, kasvoillaan avuttoman tuskan ilme, pälkähti
päähäni ajatus, että pikainen, joskin katkeroittava selitys on tässä
tapauksessa paras lääke. 'Lapseni', sanoin minä, 'minä näen liiankin
selvästi, mistä tuskasi johtuu. Sinä rakastat minua etkä ole iloinen,
ellen minä ole seurassasi. Mutta mitä seuraisikaan siitä! Minä en voi
ottaa sinua puolisokseni, enkä tekisi sitä, vaikka olisin kiintynyt
sinuun enemmänkin kuin mitä nyt olen. Ja minä pidän sinusta liian
paljon voidakseni tehdä sinut onnettomaksi. Tämän sanon sinulle,
vaikka se tuottaa tuskaa itsellenikin; mutta sinun täytyy saada tietää
koko totuus voidaksesi menetellä sen mukaan. Sinun täytyy koittaa
unhoittaa minut. Huomispäivä on oleva viimeinen päivä, jolloin
tapaamme toisemme; näin olen velvollinen tekemään sinun itsesi ja
isäsi muiston takia. Ole siis järkevä, lapseni, äläkä vaikeuta
pyrkimystäni olla vain ystäväsi.'

"Suunnilleen niin puhuin hänelle ihmetellen samalla synkkää


vaiteliaisuutta, jolla hän kuunteli sanojani. Niin, melkeinpä luulin
erehtyneeni ja arvelin hänen sairautensa kenties johtuvan jostakin
fysillisestä aiheesta. Suosittelin häntä siksi vielä kerran kunnon
isäntäväelle ja läksin tieheni päättäen seuraavana aamuna tuoda
mukanani jonkun etevän lääkärin häntä tutkimaan.

"Mutta siten en voinut poistaa huolestumistani enkä myöskään


tuota vähitellen yhä houkuttelevammaksi muuttuvaa unelmaolentoa
kohtaan tuntemiani tunteita. Vietin vaikean yön, sadat mahdottomat
ehdotelmat pyörivät päässäni, ja kun nousin ylös myöhään aamulla,
en ollut yhtään viisaampi kuin illallakaan levolle laskeutuessani.

"Olin juuri istuutunut aamiaispöytään, kun huoneeni ovi avautui ja


kunnon maanmiehettäreni, edellämainitsemani maison garnie'n
emäntä, syöksyi sisään kuolonkalpeana ja kertoi tuon kauhean
uutisen, että nuori nainen, jonka eilen olin tuonut heidän luokseen,
oli yöllä tehnyt itsemurhayrityksen. Kun hän aamulla ei ollut kuullut
minkäänlaista ääntä hänen huoneestaan, oli hän mennyt hänen
ovelleen ja kolkuttanut, koska asia tuntui hänestä epäilyttävältä. Kun
useampiin kolkutuksiin ei kuulunut mitään vastausta, oli lukko
murrettu auki. Silloin löydettiin hänet puolipukeissa makaavan
sohvalla aivan veren tahraamana. Pienellä veitsellä oli hän lyönyt
useampia haavoja vasemmalle puolelle rintaansa Hän oli vielä
hengittänyt, vaikkakin hyvin heikosti, ja hänen silmänsä olivat
suljetut. Rouvan mies oli heti juossut lääkäriä noutamaan, kun hän
taas itse oli kiiruhtanut minun luokseni.

"En tarvinne kertoa sinulle, mitä tunsin rientäessäni


tapahtumapaikalle. Tapasin siellä jo lääkärin tutkimassa haavoja,
jotka hän selitti sangen vähäpätöisiksi, koska jaloimmat osat eivät
olleet vahingoittuneet. Mutta verenvuoto olisi voinut päättyä
kuolemalla, jos apu olisi tullut pari tuntia myöhemmin. Hänen vielä
huoneessa ollessaan tuli tyttö hetkiseksi tuntoihinsa. Kun hän näki
minut sänkynsä vieressä, tuli hänen katseeseensa liikuttava tuskan
ja arkuuden ilme, aivan kuin olisi hän peljännyt saavansa moitteita.
Mutta minä kuiskasin hänen korvaansa vain sydämestäni uhkuvia
hyväilysanoja. Silloin hymyili hän ja sulki jälleen silmänsä.

"Oi kuinka kaunis hän oli!" — —

3.

Archibald vaikeni ja peitti käsillään kasvonsa. Myöskin hänen


ystävänsä nojasi päätään käteensä. Niin istuivat he hetkisen
kumpikin omalla puolellaan marmoripöytää eikä kumpikaan heistä
halunnut enää tarkastella kuvan surullisia kasvonpiirteitä, jotka
mykkinä ja tunteettomina olivat seuranneet keskustelun kulkua.

Viimein tempautui Archibald irti syvistä mietteistään, kulki


huoneen poikki ja pysähtyi avoimelle balkonginovelle, josta kuunvalo
ja yön viileys tunkeutui sisään leveänä, virkistävänä virtana. Ystävä
seurasi häntä ja laski sydämellisesti kätensä hänen olalleen.
"Tällaista en voinut aavistaakaan", sanoi hän, "kun näin teidät
yhdessä enkä tiennyt, kumpi teistä oli kadehdittavampi."

"Huumaus oli lyhyt, ja katumus on pitkä", vastasi Archibald


synkkänä. "Mutta sydämeni tuntuu kuitenkin kevyemmältä
kerrottuani sinulle tämän. Sinun täytyy myöntää, että minulla olisi
pitänyt olla suunnatonta yli- ja melkeinpä epäinhimillistä sankaruutta
voidakseni tuollaisen tapahtuman jälkeen tempautua irti ja vain
ajatella omaa rauhaani, joka kyllä olisi voinut pelastua nopean eron
kautta. Mutta eikö silloin hänen rauhansa olisi ollut mennyttä? En
tiedä mitä saivarteleva morali olisi voinut määrätä tässä
epätoivoisessa asemassa. Mutta mitäpä siitä, se tapahtui, minkä piti
tapahtua.

"Sinä tapasit meidät juuri parhaaseen aikaan, jolloin minulla vielä


oli voimaa — tahi heikkoutta? — sysätä syrjään kaikki
tulevaisuusmietteet. Hän taas ei kertaakaan tuon suhteen kestäessä
liene epäillyt, että se joskus loppuisi. Kun hän myöhemmin joskus
näki minut miettiväisenä ja hajamielisenä, ei koskaan hänen
päähänsä pälkähtänyt ajatus, että hän itse voisi olla syynä siihen.
Silloin koitti hän aina olla kahta vertaa iloisempi ja hauskempi. Tosin
ei hän voinut muuttua loruilevaksi ranskattareksi, ja kun joku kolmas
oli saapuisalla, muuttui hän useimmiten unelmoivan totiseksi, aivan
kuin olisin minä ollut poissa tahi kuulunut hänelle vain puoliksi. Mutta
tuskin oli ovi sulkeutunut vieraan jälestä, kun koko hänen olentonsa
elostui ja hän tuhansin tavoin koitti osoittaa minun olevan hänelle
kaikki kaikessa tässä maailmassa. Oi, ystäväni, kuinka oikukas,
kuinka kiittämätön, kuinka tyrannimainen onkaan ihmissydän!
Voinetko uskoa, että hänen rajaton hellyytensä ei voinut poistaa
tuota epämieluista tunnetta, joka alusta alkaen oli varoittanut minua
hänestä? — että tuosta huumauksesta huolimatta joku kohta
sisässäni jäi kylmäksi ja raittiiksi ja että ääni rinnassani lakkaamatta
huusi minulle: hän ei ole sinulle enempää kuin kaunis orjatar
sultanille, ja siksi tämä kaikki ennen tahi myöhemmin loppuukin,
kuin joku 'Tuhannen ja Yhden Yön' tarina, kuin kangastus, joka
loistaa hetkisen kadotakseen heti jälleen? Ja sitten mietin, kuinka
minun pitäisi käyttäytyä tehdäkseni itseni hänelle tarpeettomaksi,
vaikkakaan se ei voisi tapahtua muulla keinolla, kuin että hän oppisi
vihaamaan minua.

"Voit arvata, kuinka tällainen särkyneisyys katkeroitti kaiken ilon.


Minä tiesin meidän lopulta tulevan onnettomiksi, jos jatkaisimme
yhdessä elämistä. Ja kuitenkin, kuinka voisin minä erota hänestä,
joka näytti nykyisin elävän yksin ja ainoastaan minulle ja minua
varten! Sitäpaitsi aloin minä juuri siihen aikaan omituisen
levottomana ajatella Cecilian lapsellisia silmiä, jotka ennen niin
vakavasti olivat katselleet nuorta vänrikkiä. Kirjoituspöydän
salaisimmassa komerossa säilytin minä tuon nyt täysikasvuiseksi
kehittyneen nuoren tytön valokuvaa, jonka äitini, kuten hyvin tiesin,
salaisessa mutta varmassa tarkoituksessa oli lähettänyt minulle.
Koska minä liiankin usein otin esille tuon valokuvan ja katselin sitä
mitä vaihtelevimpien tunteiden vallitessa mielessäni, niin ei ollut
lainkaan ihmeellistä, että Virginia, joksi minäkin kutsuin häntä, yllätti
kerran minut tuollaisessa tilaisuudessa. Sanoin hänelle kuvan
esittävän sisartani, etten haavoittaisi hänen sydäntään. Sana sisar
saattoi hänet miettimään, ei siksi ettei hän olisi uskonut sanojani —
minä olisin voinut sanoa kuun ukkoa veljekseni hänen epäilemättä
sanojani todeksi — mutta ensi kerran tuli hän ajatelleeksi, että minä
kuuluin myöskin muille kuin hänelle. Minun täytyi kertoa hänelle
omaisistani. 'Miellyttäisinköhän minä äitiäsi?' vastasi hän vain. Sitten
valitsi hän toisen keskusteluaiheen, aivan kuin joku vaisto olisi
sanonut hänelle, ettei ole hyödyllistä muistuttaa minulle kodistani.
"Omituista kyllä muodostui tuo ilta viimeiseksi, jolloin olimme
yhdessä. Seuraavana aamuna sain äidiltäni kirjeen, jossa hän mitä
hartaimmin kehoitti minua saapumaan kotiin, jos tahtoisin vielä
tavata isäni hengissä. Minä istuin juuri aamiaispöydässä, rakastettuni
vastapäätä. Myöskin hän oli, omituista kyllä, saanut kirjeen, joka
ensin saattoi hänet hämilleen, mutta sitten herätti hänen
iloisuuttaan. Kun me kumpikin olimme lukeneet kirjeemme, katsoi
hän minuun kiusoittavasti hymyillen. — 'Kas tässä', sanoi hän
ojentaen minulle kirjeensä, 'on jotakin, jolle saat nauraa.
Toivottavasti on sinun kirjeesi järkevämpi.' Minä nyökäytin hänelle
syviin mietteisiin vaipuneena vaieten päätäni ja otin koneellisesti
kirjeen hänen kädestään. Muuan nuori mies, joka oli merkinnyt
kirjeen alle täyden nimensä, ilmaisi hänelle siinä intohimoisin, mutta
ei kuitenkaan liioitelluin sanoin rakkautensa ja tarjosi hänelle heti
kätensä. Hän tiesi kyllin hyvin Virginian suhteen minuun, mutta hän
tiesi myöskin omat tarkoituksensa kunniallisemmiksi kuin minun,
joka kaikissa tapauksissa ennemmin tai myöhemmin jättäisin hänet
kurjuuteen ja häpeään. Hän oli tuntenut hänen isänsä ja valitteli sitä,
että Virginia kokemattomuutensa takia oli eksynyt näin pitkälle. Jos
hän nyt voisi pysähtyä tuolla kaltevalla tiellä ja ojentaa kätensä
tosiystävälle, niin tulisi hänen vain vastata hänelle, jolloin hän pitäisi
huolen kaikesta muusta.

"Virginia hymyili lapsen tavoin minun vaieten ja vakavana


laskiessani kirjeen takaisin pöydälle. Hän luuli, että minä todellakin
pelkäsin hänen suostuvan tuohon kosintaan, ja haihduttaakseen
mielestäni tuollaiset arvelut esiintyi hän minua kohtaan mitä
iloisimpana ja rakastettavimpana. Et voi aavistaa, ystäväni, millaisia
tuskia kärsin tehdessäni hänen puoliksi lapsellisten, puoliksi
hurmaavien hyväilyjensä kestäessä lujan päätöksen hiipiä vielä
samana päivänä pois hänen läheisyydestään! Hän oli mielestäni nyt
enemmän kuin koskaan ennen uhrauksien arvoinen, liikuttavampi
kuin koskaan ennen horjumattomassa luottamuksessaan, ettemme
koskaan eroaisi. Särjetyin sydämin irtaannuin viimein hänestä ja
pakenin edellä mainitsemani maison garnie'n emännän luo, joka
yhäti tunsi äidillistä rakkautta tuota tyttö-raukkaa kohtaan. Illalla
siihen aikaan, jolloin tavallisesti palasin kotiin syömään päivällistä,
piti hänen mennä Virginian luo ja ilmoittaa hänelle äitini kirjeen
sisältö. Helpottaakseni hänen tehtäväänsä jätin hänelle tuon kirjeen,
että Virginia omin silmin huomaisi ilmoituksen todeksi. Minun täytyi
muka matkustaa yhtämittaa yöt ja päivät, en ollut voinut ottaa häntä
mukaani ja olin tahtonut säästää sekä hänet että itseni eron
aiheuttamista tuskista, mutta minä palaisin takaisin — niin pian kuin
voisin. Poissa ollessani pitäisi hänen hoitaa itseänsä ja olla kiltti.
Kirjoituspöytäni laatikkoon olin jättänyt sangen huomattavan
rahamäärän, enkä kaikesta omaisuudestani ollut ottanut mukaani
mitään muuta kuin Cecilian kuvan.

"Niin se tapahtui — ja mitäpä olisikaan enää lisäämistä? Sinä


tiedät, miten täällä olivat asiat — isäni oli kuollut ennen paluutani, ja
äitini, joka ei voinut ilman häntä elää, vaipui sairasvuoteelle, jota hän
ei enää voinut jättää, vaan läksi vuoden kuluttua hänkin pois luotani.
Hänen sairastaessaan en voinut palata jatkamaan parisilaiselämää,
joka nyt tuntui minusta opiumin polttajan unelmalta, kaksinverroin
kauheammalta, nähtyäni jälleen Cecilian ja huomattuani, että hän
yksin voisi tehdä minut onnelliseksi.

"Kirjoitin saksalaiselle ystävättärelleni, hotellin emännälle, siihen


aikaan, jolloin arvelin jättämieni rahojen kenties alkavan loppua,
lähetin hänelle uuden maksumääräyksen hyljätyn tyttöraukan
hyväksi ja pyysin tietoja hänestä salaamatta mitään silloisesta
asemastani. Vasta kolmen viikon kuluttua sain vastauksen, että
Virginia oli jonkun aikaa elänyt aivan erillään muusta maailmasta ja
näyttänyt ulkonaisesti sangen rauhalliselta, mutta sitten yht'äkkiä
kadonnut. Kaikki etsiskelyt ovat olleet tuloksettomia.

"Luin tuon vastauksen maalaiselämän yksinäisyydessä, jossa ei


ollut ketään lieventämässä tuskiani ja sieluntaistelujani. — 'Hän on
kuollut! Hänen kuolemansa on sinun aiheuttamasi!' syyttelin minä
itseäni, ja mielikuvitukseni esitti minulle kauhukuvan toisensa
jälkeen. Viimein luulin kuulevani jonkun äänen sanovan itselleni:
'Hän elää! Hän ei voi kuolla sinutta! Jonakin päivänä, sinun vähiten
aavistaessasi sitä, esiintyy hän uudelleen ja turmelee elämäsi,
samaten kuin sinä olet turmellut hänen onnensa!' — Sellaista oli
elämäni päivin ja öin, viikkojen ja kuukausien kuluessa —
sieluntuskia ja puolusteluja, että sallimus vain oli syynä kärsimyksiini
— niin, sinä, ystäväni, vaikka olet runoilija ja tunnet koko joukon
tärisyttäviä tragedioita, et voi tuntea kymmenettä osaakaan niistä
sieluntuskista, jotka alinomaa vaivasivat minua.

"Mutta ne lieventyivät sitä mukaa kuin kuukaudet kuluivat eikä


Parisista kuulunut mitään. Kun kokonainen vuosi ja äitini kuolemaa
seurannut suruvuosi olivat kuluneet, keveni sydämeni kuin olisi kivi
siltä pudonnut. Uskalsin jälleen nostaa silmäni ylös maasta, pilkistää
sisään uuteen elämään ja ajatella kaiken vanhan jo sovitetuksi. Sain
myöskin tällöin kylliksi rohkeutta pyytää Cecilian kättä. Luulin nyt
kaiken vanhan voitetuksi ja hänen puhtaan läheisyytensä sekä hänen
omistamisensa täydentävän syntini sovituksen. Mutta nyt tuntuu kuin
olisin tehnyt uuden rikoksen uskaltaessani kosia häntä."

Hän vaikeni taaskin ja katseli kuun valaisemaa taivasta, joka näkyi


puiden takaa. Oli mahdoton huomata, kuuliko hän niitä ystävällisiä ja
osanottavaisia sanoja, jotka ystävä lausui häntä rauhoittaakseen.
Yht'äkkiä keskeytti hän hänet nopealla kysymyksellä:

"Uskotko sallimukseen?"

"Ystävä hyvä", vastasi toinen, "minä olen vielä huonompi filosofi


kuin runoilija. Ja mitäpä hyötyä sitäpaitsi olisi joko myönteisistä tahi
kielteisistä todistuksista? Turhan järkeilemisen asemasta pitäisi sinun
yksin ja ainoastaan ajatella, ettei sinulla nykyisin ole mitään
korkeampaa velvollisuutta kuin tehdä Cecilia onnelliseksi ja poistaa
hänen tieltään kaikki sellainen, joka aaveen tavoin voi kohota
menneestä elämästäsi häntä häiritsemään. Ennen kaikkea täytyy
sinun poistaa tuo kuva ja kätkeä se johonkin varmaan paikkaan,
josta se ei enää koskaan ilmesty näkyviisi. Siitä syystä en minäkään
voi ostaa sitä sinulta. Mutta ellei jotakin ostajaa löytyisi, niin iskisin
minä sen ennen kappaleiksi, kuin antaisin sen tuolla tavoin kiduttaa
itseäni."

"Olet oikeassa", sanoi Archibald kolkolla äänellä. "Se on


poistettava, mutta vain varmoihin käsiin. Lyö se kappaleiksi, sanot
sinä? Tuskinpa löytyisi ihmistä, joka rohkenisi kohottaa kättänsä
tuohon tekoon. Sillä eikö sinustakin, ystäväni, tunnu kuin olisi silloin
kysymyksessä elollisen olennon tappaminen? Joka tapauksessa —
jos jossakin voisi upottaa sen syvään veteen — mutta ei, ei! Se olisi
vielä kauheampaa! Tukahduttaa! hukuttaa!"

Hän oli astunut jälleen komeroon ja katseli tuskan ilme kasvoillaan


tuota kuvaa. Ystävä pelkäsi liikutuksen synnyttävän hänessä jonkun
oudon ja ikävän päähänpiston.

"Kas niin", sanoi hän, "se ei kelpaa, että sinä lakkaamatta katselet
noita kasvoja ja mietit kaikkea joutavaa. Tule mukanani klubiin, tahi
jos et tahdo ihmisten seuraa, niin menkäämme pienelle kävelylle
Thiergarteniin ja sitten johonkin supé'lle. Sinä ajattelet asiaa paljon
rauhallisemmin saatuasi pari lasia vanhaa, hyvää sherryä."

"Ei, jätä minut yksikseni", vastasi Archibald melankolisesti. "Minun


täytyy vielä tänä iltana järjestää joukko tärkeitä asioita ja sitten
toivon saavani nukkua ja nukkua samalla pois koko joukon
mietteistäni. Kiitän sinua ystävällisestä tarjouksestasi.
Vastaisuudessa kyllä tulen usein ottamaan sen huomiooni, mutta
tänä iltana…"

"Minä huomaan sinun haluavan olla yksinäsi", sanoi ystävä ja


tarttui hattuunsa. "Aamulla saavun uudestaan ja toivon silloin
tapaavani sinut täysin toipuneena. Hyvää yötä, Archibald!"

Niin poistui hän, ja myöskin paroni läksi kabinetista käskien


palvelijan sammuttamaan lampun ja tuomaan raitista vettä
työhuoneeseen. Siellä, kirjakaapeilla ja kauneilla kuparipiirroksilla
miellyttävästi koristellussa huoneessa, jossa Cecilian ihastuttava
akvarelli-muotokuva seisoi jalustalla kirjoituspöydällä, luuli hän
voivansa paremmin. Hän joi pari lasia vettä, kirjoitti muutamia
liikekirjeitä ja istui sitten pitkän aikaa pöydän ääressä tuprutellen
savua sikaristaan, ja katsellen tuon suloisen tytön loistavia sinisilmiä.
Hän oli tuntevinaan verensä hyökyvien aaltojen vähitellen tyyntyvän
suonissaan. Pakoitus päässä oli kuitenkin yhäti entisellään, mutta
sen toivoi hän voivansa nukkua pois.

Hän oli jo sammuttanut kynttilän ja aikoi laskeutua pitkälleen


suurelle divanille, jonka palvelija oli tyynyjen ja peitteiden avulla
muuttanut vuoteeksi, kun samassa puutarhan puoleisesta huoneesta
kuuluva melu sai hänet säpsähtämään. Kuului kuin olisi joku
varovaisesti kiivennyt pitkin balkongia ja hiljaa avannut kabinettiin
johtavan oven. Sitten ei pitkään aikaan kuulunut mitään, ja Archibald
alkoi jo luulla erehtyneensä. Hän ei kuitenkaan voinut rauhoittua,
vaan nousi nopeasti ylös, veti päällensä silkkisen yötakkinsa, tarttui
keppiin, jonka päässä oli raskas pronssinuppi ja avasi hiljaa salongin
oven. Matto vaimensi hänen askeltensa äänen. Hengitystään
pidättäen hiipi hän kuunvalossa huoneen poikki ja jäi kuuntelemaan
kabinetin suljetun esiripun taakse. Mutta sieltä ei kuulunut enää
mitään ja vain rauhoittuakseen työnsi hän esiripun poimua hieman
sivulle voidakseen katsoa sisään; mutta samassa peljästyi hän niin,
että jäi hetkiseksi liikkumattomana seisomaan paikoilleen, kylmän
väristyksen kulkiessa pitkin hänen selkärankaansa.

Ja kuitenkaan ei hänen näkemänsä ollut mitään erikoisen


kauheata, vaan olisi päinvastoin monen muun mielestä tuntunut
hupaiseltakin. Komeron marmoripöydällä, jonka kullatuilla jaloilla
kuunvalo väreili, istui kokoonkyyristynyt apina, joka näytti vaipuneen
niin hartaasti katselemaan kuvapatsasta, etteivät sen muuten niin
tarkat korvat kuulleet oven avautumista. Toisessa kädessään oli sillä
Cecilian burnusista repäisemänsä valkoinen tupsu, toisella raapi se
pitkäkarvaista päätään narisuttaen samalla hampaitaan ja päästäen
silloin tällöin suustaan äänen, joka kuului huokaukselta tai
nyyhkytykseltä. Nyt nousi se ylös — tuo mykkä, liikkumaton kuva
näytti saattavan sen levottomaksi. Nelinkontin hyppi se hyrrän tavoin
pyörien pöydän ympäri, piti tupsua hampaittensa välissä ja murisi
kumeasti. Äkkiä hyppäsi se sohvalle, ojentausi suoraksi, tarttui
kuvajalustan kulmaan ja loikkasi rivakalla hyppäyksellä kuvan
helmaan, jossa se jälleen kyyristyi ja alkoi lähemmin tarkastella tuota
arvoituksellista ilmiötä. Se kohotti karvaiset sormensa kuvan kauniille
olalle ja silitteli hyväillen sen hoikkia käsivarsia. Se kohosi nyt hiljaa
ylös ja taivutti samalla päätänsä taaksepäin, aivan kuin olisi halunnut
purra poikki tuon pienen vihreän käärmeen, joka lienee herättänyt
sen vastenmielisyyttä, mutta samassa säpsähti se ja kääntyi nopeasti
ympäri. Takanaan näki se herransa korkean vartalon ja uhkaavaan
asentoon kohotetun kepin. Kimeästi kirkaisten hyppäsi eläin sängyn
ja pöydän ylitse balkonginovelle. Mutta lasiovet olivat äänettömästi
sulkeutuneet sen sisään saavuttua, eikä se niin ollen voinutkaan
päästä ulos. Hädissään kiipesi se akkunalaudalle, mutta keppi, jolla
Archibald vimmastuneena huitoo sitä, sattui kipeästi sen vyötäisiin.
Huutaen hyppäsi se lattialle ja pakeni toiseen päähän huonetta yhäti
koittaen etsiä jotakin pakotietä. Kepin yhä useammin sattuessa sen
selkään pakeni se viimein uudelleen kuvan syliin. Siellä ryömi se
kokoon koko ruumis vavisten, ja sen pienet vihreät silmät odottivat
omituisesti vilkkuen, mitä nyt tapahtuisi. Se näytti ymmärtävän, että
kuva suojeli sitä ja että se kuvan sylissä oli ainakin turvattu iskuilta,
jotka luonnollisesti sattuisivat kuvaan. Eikä se tuossa luulossaan
pettynytkään. Vainooja jäi liikkumattomana seisomaan sen eteen, ja
hetkisen mittailivat ihminen ja eläin tasaväkisten vastustajain tavoin
toisiaan vihan ja inhon katseilla. Sitten malttoi Archibald mielensä.
Hän astui balkonginovelle ja avasi molemmat ovenpuoliskot. Sen
jälkeen vetäytyi hän esiripun taakse ja viipyi muutamia minuutteja
salongissa. Kun hän uudelleen astui kabinettiin, oli apina kadonnut.

Syvään huoahtaen katseli nuori mies ympärilleen. Väkinäisesti


meni hän sulkemaan balkongin oven ennen kabinetista
poistumistaan.

Työhuoneeseensa saavuttuaan lukitsi hän tarkoin oven ollakseen


aivan varma siitä, ettei joku aave seuraisi häntä sinnekin. Sitten
vaipui hän väsyneenä nojatuoliin ja istui siinä pitkän aikaa, kunnes
päätti uudelleen sytyttää tulen lamppuun ja tarttua johonkin kirjaan
mieltänsä ahdistavien kauhukuvien vaimentamiseksi.
Niin kului suurin osa yöstä. Vasta kuun laskeutuessa voi hän
mennä levolle. Aamulla ylösnoustuaan ja kuvastimeen katsottuaan
kauhistui hän ulkomuotoaan; hän ei ollenkaan näyttänyt onnelliselta
sulhaselta, sillä hänen silmänsä olivat punaiset, kuin olisi hän itkenyt
useampia tunteja unissaan. Hänen oli mahdoton astua kabinettiin;
kävely raittiissa ilmassa tekisi hänelle epäilemättä hyvää, ajatteli hän.

Puutarhaan saavuttuaan näki hän apinan kokoonkyyristyneenä


istuvan, pienessä tornissa, aivan kuin ei mitään olisi tapahtunut.
Puutarhuri kertoi hänelle tavanneensa aamulla apinan irrallaan
käyskentelevän puistossa. Vastarintaa tekemättä oli se kuitenkin
antautunut kiinni ja antanut uudelleen sitoa ranteeseensa
irroittamansa renkaan. Archibald käski seuraavaksi yöksi sulkea
pienen tornin oven, ellei hän sitä ennen löytäisi tuolle eläimelle
ostajaa. Sitten meni hän kaupungille.

Taidekauppiaan myymälässä, jonne hän ensin poikkesi, ei voitu


antaa hänelle tyydyttävää kertomusta kuvan alkuperästä. Muuan
tuntematon nuori mies, todennäköisesti ranskalainen, jokseenkin
kehnossa puvussa ja käytökseltään huomattavasti rauhaton ja
hermostunut, oli ajaen tuonut kuvan myymälään ja kysynyt, voitiinko
se ostaa. Hän oli asettanut kuvalleen tavattoman korkean hinnan,
mutta kun taidekauppias oli huomauttanut, että kuvalle kenties
löytyisi muuan ostaja, mutta ettei hän voi maksaa niin suurta
summaa kysymättä ensin tuon herran mielipidettä, niin oli hän
tyytynyt pienempään etumaksuun ja heti sen saatuaan syöksynyt
ulos myymälästä, aivan kuin olisi peljännyt alkavansa katua kauppaa.
Hän palaisi kyllä takaisin noutamaan loppusummaa, sillä hän oli
katsonut arvostelleensa teoksensa hinnan pikemmin liian alhaiseksi
kuin korkeaksi.
Archibald pyysi, että taiteilija, niin pian kuin hän palaisi,
lähetettäisiin hänen luoksensa. Sitten kuljeskeli hän mitään
ajattelematta muutamia tunteja vilkkaimmilla liikekaduilla, seisoskeli
taide- ja valokuvakauppojen näyteakkunain ääressä, mutta kaikkialla
oli hän näkevinään vain yhdet ainoat kasvot. Sitten meni hän
samaan aikaan kuin tavallisesti Ceciliaa tervehtimään. Hän oli
tavallista kärsimättömämmin odotellut tuota hetkeä; mutta
noustessaan portaita ylös pysähtyi hän useampia kertoja
hengähtämään, sillä hänestä tuntui kuin olisi joku hirveä paino
ahdistanut hänen rintaansa. Täti tuli häntä tervehtimään, mutta
morsiantaan ei hän saanut tavata, sillä Cecilialla oli ollut levoton yö
ja kevyempi kuumekohtauskin, josta syystä tohtori oli selittänyt
hänelle olevan parasta pysyä vuoteessa koko päivä. Hän oli
kotimatkalla hieman vilustunut, ja tuon ilkeän eläimen synnyttämä
kauhu oli myöskin hiukkasen tärisyttänyt hänen hermojaan.
Archibald ei kertonut mitään edellisen yön seikkailuistaan. Hän
poistui pian ja melkeinpä tunsi tyytyväisyyttä sen johdosta, ettei ollut
tavannut Ceciliaa. Hän ei luullut omaavansa kylliksi voimia käyttäytyä
iloisesti ja luontevasti hänen seurassaan, eikä hän olisi myöskään
voinut kertoa hänelle mitään siitä synkästä kohtalosta, joka heitti
varjojaan hänen ylitsensä.

Iltapäivällä antoi hän satuloida hevosensa; hän toivoi


ratsastaessaan väsyvänsä ja nukkuvansa sitten yönsä kertaakaan
heräämättä. Illalla myöhään takaisin palatessaan kysyi hän heti,
oliko joku vieras hänen poissaollessaan käynyt häntä kyselemässä.
Mutta kukaan muu ei ole käynyt kuin hänen ystävänsä Tancred, joka
oli käskenyt sanoa hänelle tervehdyksensä. Työhuoneeseensa
saavuttuaan löysi hän kirjoituspöydältään Cecilian kirjeen. Kirje, joka
oli kirjoitettu lyijykynällä ja sisälsi helliä, rakkautta uhkuvia sanoja,
teki hänelle hyvää. Hän laati heti vastauksen, kertoen kuinka ikävältä
tämä päivä oli hänestä tuntunut sen johdosta, ettei hän ollut saanut
tavata häntä, kuinka hän tuskin jaksoi odottaa sitä päivää, jolloin he
ainiaaksi yhdistyisivät, ja lopetti kirjeensä toivomuksella, että hänen
ajatuksensa olisivat vain iloisia ja onnellisia ja että hän nukkuisi yhtä
rauhallisesti, kuin hän itsekin toivoi saavansa nukkua saatuaan
hänen hyvää ja onnellista yötä toivottavan kirjeensä. Hän sulki
kirjeen sinetillään ja lähetti sen määräpaikkaansa. Sitten päästi hän
palvelijansa vapaaksi, sillä hän aikoi tänään mennä aikaisin levolle.

Hän nukkuikin heti, väsyneenä edellisen yön ja rauhattoman


päivän tapahtumista, mutta heräsi jo ennen puoliyötä. Heikko
kuunvalon synnyttämä valojuova tunkeutui huoneeseen
alaslaskettujen käärekaihtimien sivusta. Hänen ympärillään vallitsi
niin syvä hiljaisuus, että hän selvästi kuuli salongista pöytäkellon
naksutuksen. Kello löi yksitoista, kaksitoista, yksi, kaksi, mutta uni ei
palannut. Ulkona oli taivas peittynyt pilviin, ja hiljainen sade rapisi
akkunoita vasten. Mutta se ei jäähdyttänyt unettoman kuumaa
otsaa, vaan yhä levottomampien ajatusten ahdistamana kieriskeli
hän sinne tänne vuoteellaan. Viimein loppui hänen kärsivällisyytensä.
Hän nousi ylös ja ryhtyi pukeutumaan. Hän aikoi mennä ulos
sateeseen tukahduttaakseen siten aivojensa poltteen. Mutta sitten
päätti hän toisin. Syynä hänen levottomuuteensa voi olla yksinomaan
tuon onnettoman kuvan läheisyys. Jospa hän heti poistaisi sen!
Hänen tarvitseisi vain kantaa se pieneen puistopaviljonkiin, ja heti
vapautuisi täällä ilma kaikista pahoista henkiolennoista, jotka nyt
ehkäisivät hänen untansa. Hän tahtoi joka tapauksessa koittaa sitä
keinoa.

Ensin aikoi hän herättää jonkun palvelijan avukseen, mutta


jonkunlainen häpeän tunne esti hänet niin tekemästä. Päättäväisesti
pudisti hän päältään kauhun, joka oli hänet valtaamaisillaan, läksi
huoneestaan ja astui kabinettiin, jonka ovea hän koko edellisen
päivän oli varonut avaamasta. Siellä oli kaikeksi onneksi niin
pimeätä, ettei hän voinut eroittaa kuvan kasvonpiirteitä. Varmuuden
vuoksi heitti hän suuren silkkinenäliinan kuvan ylitse, nosti sen sitten
jalustalta ja kantoi sen hiljaa ja varovaisesti pitkin pimeitä portaita
alas puistoon.

Hänen taakkansa muuttui joka askeleelta yhä raskaammaksi;


mutta viileä sadeilma, joka tuulahteli hänen paljaan päänsä
ympärillä, antoi hänelle uusia voimia. Saavuttuaan ulkoportaille, jäi
hän hetkiseksi levähtämään ja nojasi taakkaansa kaidepuuhun.
Pimeässä puistossa hänen edessään vallitsi kuolonhiljaisuus, ja vain
lintutalossa liikahti joku lintu unissaan yöpuullaan. Ylhäällä suljetussa
tornissa näytti apina äkkiä havahtuneen. Archibald kuuli sen ensin
varovasti ja sitten yhä kärsimättömämmin ravistavan ovea; nyt koitti
se hampain murtaa lukon, nyt taas koko ruumiinsa voimalla sysätä
ovea. Väliin kuului vikinää ja vinkumista, joka yön hiljaisuudessa
kaikui niin uhkaavana ja valittavana. Yksinäinen kuuntelija tunsi
rohkeutensa alkavan horjua. Hän tarttui uudelleen taakkaansa ja
astui nopeasti alas puistoon. Hikipisarat kohosivat hänen otsalleen,
ja hänen rintansa kohosi kiivaasti; väliin pysähtyi hän, sillä kuva
hänen kainalossaan muuttui lyijynraskaaksi ja oli painaa hänet
maahan: sitten pääsi hänen tahdonvoimansa jälleen voitolle, ja hän
jatkoi matkaansa. Vain viisikymmentä askelta enää, ja hän olisi
perillä. Mutta nyt kuuli hän jonkun hiipivän takanaan pitkin maata;
se tuli yhä lähemmäksi ja lähemmäksi. Arvellen sitä jonkin
naapuritalon kissaksi käänsi hän hieman päätään. Äkkiä pysähtyi veri
hänen suonissaan. Kirkaisten antoi hän pudota kuvan käsivarreltaan,
niin että se kumeasti jysähtäen kaatui hietikkopolulle, ja tarttui
kauhistuneena molemmin käsin päähänsä. Apina, joka oli hiipinyt
hänen takanaan, oli hypännyt hänen niskaansa, pusertanut hänen
kaulansa ympärille kylmät takakäpälänsä ja takertunut etukäpälillään
hänen hiuksiinsa, jolloin sen terävät kynnet tunkeutuivat hänen
ohimoihinsa. Sen voitto oli kuitenkin vain hetkellinen, sillä viimeiset
voimansa ponnistaen tarttui Archibald vasemmalla kädellään sen
kupeeseen ja oikealla kaulaan ja pusersi tuskan aiheuttamalla
voimalla kätensä kiinni, jolloin apina raivokkaasti kiljaisten päästi
otteensa ja iskettyään tuskissaan hampaansa hänen toisen
silmäkulmansa yläpuolelle raastautui irti vihollisensa käsistä. Sitten
kiepahti se eräälle matalalla riippuvalle oksalle ja katosi puiston
poveen päästäen vähä väliä hurjan sotahuutonsa. — —

4.

Noin tunnin kuluttua kolkutettiin puutarhurin tuvan ovelle. Tuo


vanha palvelija heräsi unestaan ja kysyi äreällä äänellä, mitä
kolkuttaja halusi. Tuntiessaan herransa äänen avasi hän ihmetellen
ja kiirehtien oven, mutta jäi kauhistuneena seisomaan paikoilleen
nähdessään, millaisessa asussa paroni istui pienellä penkillä oven
ulkopuolella. Toinen poski oli ohimosta alkaen veren tahraama,
hiukset epäjärjestyksessä, vaatteet savessa ja aivan läpimärkinä.
Hän näytti kaatuneen kumoon ja jääneen taintuneena makaamaan
märälle nurmikolle. Hänen antamansa selitys oli sangen sekava. Hän
pyysi lasillisen vettä, sanoi ohimennen puistossa olevan jotakin, joka
pitäisi kantaa paviljonkiin, tarttui vähäväliä niskaansa ja tointui vasta
lasillisen vettä siemaistuaan siksi paljon että voi puutarhurin
käsivarteen nojaten palata huoneeseensa. Toisetkin palvelijat
heräsivät nyt ja juoksentelivat päättöminä sinne tänne, sillä he kaikki
pitivät paljon isännästään. Kukaan ei uskaltanut kysellä häneltä, eikä
hän itsekään halunnut kertoa mitään. Sitäpaitsi kielsi hän ankarasti
noutamasta lääkäriä. Huoneeseen saavuttuaan pani hän itse
laastariliuskan haavalleen otsaansa, käski palvelijan pysyä salongissa
ja määräsi, ettei ketään ole päästettävä hänen luokseen, hän halusi
nukkua. — Ja muutamien minuuttien kuluttua olikin hän vaipunut
syvään uneen.

Hän nukkui vielä kun hänen ystävänsä, tuo ystävällinen Tancred,


kävi kysymässä hänen vointiaan. Se mitä palvelijat voivat kertoa yön
tapahtumista tuolle innokkaasti kyselevälle vieraalle, oli vain omiansa
lisäämään korkeimmilleen hänen levottomuuttansa. Hän lupasi
saapua uudelleen iltapäivällä. Kotiin tultuaan sai hän kuitenkin
esimieheltään ministeriltä erään virkatehtävän, jota ei voinut lykätä
toistaiseksi, ja siksi täytyi hänen lähettää vain palvelijansa
tiedustelemaan Archibaldin vointia; palatessaan toi tämä mukanaan
sen rauhoittavan tiedon, että vapaaherra oli nukkunut koko päivän ja
juuri hänen saapuessaan pyytänyt jotakin syötävää. Yön tapahtumia
ei hän ollut näyttänyt lainkaan ajatelleen.

Mutta mitään aavistamaton ystävä kauhistui suuresti, kun hän


seuraavana aamuna, maatessaan vielä sängyssään, kuuli ovikellon
kiivaasti soivan ja heti sen jälkeen näki Archibaldin, kasvot
kuolonkalpeina, astuvan huoneeseensa.

"Hyvää huomenta, runoilija", sanoi hän oudosti vapisevalla


äänellä. "Älä anna minun häiritä itseäsi, minä poistun pian; enkä
muuten tiedäkään, mitä varten oikeastaan saavuinkaan luoksesi;
mutta ihmiset tuolla kadulla tuijottivat minuun niin omituisesti, että
minun täytyi ohimennen tulla kuulemaan, ovatko silmäni nenäni alla,
vai onko pääni muuttunut lasipalloksi, jonka lävitse voi nähdä
ajatusteni ryömivän matojen tavoin. Sitäpaitsi ei minulla ole enää
mitään vakinaista asuntoakaan, sillä kotonani pelkään saavani jos
jonkinlaisia vierailuja. Oi, Tancred, ystäväni, taivaan ja maan välillä
löytyy paljon useampia kodittomia raukkoja kuin poliisimme
aavistaakaan!"

"Jumalan tähden, Archibald", huudahti toinen ja hyppäsi nopeasti


sängystään, "mitä on tapahtunut? Sinähän puhut kuin kuumeessa ja
voit tuskin pysyä jaloillasi, ja lisäksi on otsallasi tuollainen
sormenpituinen haava! Rakas ystävä, miksi juoksentelet kaupungilla,
vaikka olet sairas, sen sijaan että lähettäisit noutamaan lääkäriä ja
kaikessa levossa ja rau…"

"Todellakin, niin, levossa ja rauhassa!" puuttui Archibald


puheeseen katkerasti naurahtaen. "Niin on kyllä helppo sanoa.
Luuletko sinä todellakin minua niin tyhmäksi, että minä tässä asussa
antautuisin katupoikain naurun alaiseksi, ellei minulla olisi syytä pitää
kotiani epävarmana olinpaikkana. Kukapa voi muuten taata" — ja
hän katsahti huolestuneena ovea — "ettei hän tule tännekin
perässäni? Mutta minulle olisikin melkein mieleisempää, jos hän
tekisi sen. Sinä voisit silloin sanoa hänelle, kuinka inhoittavaa on ajaa
ihminen talostaan, vainota kunnon ihmistä vielä häävuoteessaankin
ja jälleen kaivella esiin vanhoja ikäviä muistoja. Minä olen itse
sanonut sen hänelle, mutta minulla ei ole enää mitään valtaa hänen
ylitsensä."

"Kenen ylitse? Kuka on tullut? Kuka vainoaa sinua? Kaiken pyhän


nimessä, sano viimeinkin joku järkevä sana, tahi saatat sinä minutkin
suunniltani!"

"Suostumuksellasi suljen oven", vastasi Archibald kiihkeästi.


"Mutta avaimen täytyy jäädä lukkoon sisäpuolelle, sillä ihmeteltävän
hyvin voi kaikki hiipiä sisään avoimesta avaimenkolostakin. Kas niin,
kuuntele siis."

Mutta hän ei kertonut vielä mitään. Hän heittäytyi nojatuoliin ja


katseli ylös kattoon, aivan kuin koitellakseen, voiko hän enää pitää
silmiään auki. Samalla naputteli hän hoikilla, kalpeilla sormillaan
tuolin käsinojaan ja huokasi syvään.

Ystävä katsoi vaieten ja tuskallisin ilmein hänen melkeinpä


värittömiä kasvojaan. Nyt vasta huomasi hän Archibaldin
molemmissa ohimoissa veriset juovat ja näki hänen otsallaan olevan
haavan, vaikka sitä peittikin haavalaastariliuska, hehkuvan
tummanpunaisena. Tuo haava ei kuitenkaan näyttänyt aiheuttavan
Archibaldille tuskia, ainakin muuttuivat hänen jännittyneet
kasvonjuonteensa vähitellen yhä rauhallisemmaksi.

"Voitko jo paremmin, Archibald?" kysyi ystävä.

"Kyllä, hiukkasen", vastasi toinen yrittäen hymyillä. "Minä en ole


enää yksinäni, ja tämä mukava tuoli peittää ainakin selkäni.
Annathan tämän minulle, Tancred? Minä annan sinulle tästä tuolista
amerikkalaisen keinutuolini, joka ei ole näin varma."

"Kuten tahdot. Mutta mistä olet saanut tuon kauhean haavan?"

"Haavan? Naarmun, tarkoitat luonnollisesti. Sen ovat toiset paljon


pahemmat seikat riistäneet muististani. Miksipä tekisin suotta
kertomustani kovin laveaksi? Kun tarkoin asiaa ajattelee, niin voi
tulla siihen inhoittavaan päätelmään, että minä olenkin taistellut
itsensä paholaisen kanssa. Mutta sekin voi olla vain taikauskoa, vai
kuinka? Mutta pahempaa kuin saatanan ilkeimmätkin temput on
seikka se, että tuo kaunotar-raukka jälleen herää kuolleista ja tahtoo
suudella minua jääkylmillä huulillaan. Sinä epäilet, ystäväni. Niin,
siten te runoilijat aina teette. Te vaaditte, että meidän pitäisi uskoa
kaikki teidän aivojenne synnyttämä sekamelska, mutta mitä me itse
olemme nähneet omin silmimme ja ottaneet käsiimmekin…"

"Vannotan sinua ystävyytemme nimessä, Archibald, että heti annat


minun tietää, mitä on tapahtunut!"

"No niin, tahdonpa koittaa, voinko muistaa kaikki tapahtumat


yhtäjaksoisesti. Sinähän kävit eilen asunnossani minun nukkuessani?
No niin, minä todellakin nukuin! Ihminen, joka nukkuu kymmenen
tuntia keskellä kirkasta päivää ja sitten syö ja juo kokonaisen tunnin,
ei ole hullu eikä kuumesairas. Sanon tämän vain johdatukseksi,
tarkoituksessa, että säästäisit minulta hauskan väitteesi, että minä
olen vain nähnyt unta tahi etteivät kaikki ruuvit ole tallella päässäni.
Olin niin selvä-ajatuksinen, että aivan rauhallisesti ja järkevästi voin
itsekseni miettiä asiaa ja tulla siihen tulokseen, etten koko talosta voi
löytää parempaa turvapaikkaa aaveita vastaan kuin tulevan
makuukamarimme. Myöntänetkö minun olevan oikeassa? Sinä et voi
aavistaakaan, kuinka tungettelevaisia jotkut ihmiset ovat.

"No niin, kellon lähetessä yhtätoista menin minä tuohon


rauhalliseen, kauniiseen morsiushuoneeseen, en vielä mennäkseni
nukkumaan, vaan jälleen con amore lukeakseni kaikki Cecilian
minulle kirjoittamat kirjeet, alkaen ensimäisistä suurikirjaimisista
viimeiseen lyijykynätöherrykseen saakka. Samassa tarkoituksessa
olin myöskin ottanut mukaani hänen muotokuvansa. Sen asetin
pienelle pöydälle sängyn ääreen ja lampun sen eteen, ja sitten
heittäydyin itse vuoteelle. Niin mukavasti en ollut kahdeksaan
päivään saanut kertaakaan levätä hät'hätään kokoonpannulla
vuoteellani. Tunsin voivani sangen hyvin, lukuunottamatta heikkoa
poltetta ohimoissani; en tuntenut ajatuksiani ollenkaan kiihtyneiksi,
vaan olivat ne päinvastoin selvät ja iloiset, kuin olisi kylmää
lähdevettä veren asemasta virrannut suonissani. En ihmetellyt tätä
seikkaa, vaan pidin aivan luonnollisena, ettei mikään vihollisvoima
rohkene lähestyä tuota vuodetta. Kuulin kellon lyövän yksitoista ja
sitten kaksitoista, ja omituista kyllä, viimeisen lyönnin kajahtaessa
sammui yht'äkkiä lamppu sänkyni vieressä, niin etten voinut torjua
itsestäni jonkinlaista hieman taikauskoista mielenliikutusta. Lamput
sammuvat kuitenkin aivan luonnollisista syistä. Mutta miettiessäni
sytyttäisinkö sen uudelleen, vai koittaisinko jo nukkua, olin äkkiä
kuulevinani, kuinka puistoon johtava ruokasalin ovi ulkoapäin avattiin
ja sitten jälleen hiljaa suljettiin. Tuntematta vielä hiukkastakaan
kauhua nousin istumaan sängyssäni ja kuuntelin. Silloin kuulin aivan
kuin paljaan pienen jalan hiipiviä askeleita portailta; hiljaa, hiljaa
avattiin salonginovi, askeleet lähenivät matolla ja pysähtyivät, niin
olin kuulevinani, esiripun taakse, aivan kuin kuunnellakseen, oliko
mitään häiriötä odotettavissa sisäänastuessa. Ymmärtänethän, ettei
asia enää tuntunut minusta hauskalta. Nousin nopeasti ylös, heitin
päälleni muutamia vaatekappaleita, ja hiivin lukitsemattomalle ovelle
kurkistamaan avaimenkolosta. Sattumalta olivat balkongin verhot
sysätyt kiinni, joten kabinetissa oli aivan pimeätä. Mutta juuri kuin
kumarruin katsomaan avaimenkolosta, sysättiin esirippu syrjään — ja
hän itse astui sisään!"

"Virginiako? Kauhea uni!"

"Uniko? Sinä saat uskoa mitä haluat. Minä tiedän, mitä minä
tiedän. Ei, ystäväni, minulla on liiankin tarkkoja todistuksia siitä, että
kaikki oli totta; mutta siitä lisää myöhemmin. Mitä minä äsken
sanoinkaan? Niin, se oli totta, hän astui esiripun takaa elollisena,
ainoastaan hieman pienemmältä näytti hän minusta, niin että olisin
voinut vannoa, että hän todellakin oli se Kleopatra, jonka olin
kantanut pois komerosta ja joka nyt palasi takaisin puistosta, koska
hänelle yksinäisyydessä kävi aika pitkäksi ja hän myöskin toivoi
saavansa hieman kiduttaa minua. Sinä pudistat päätäsi
epäuskoisesti! Minä sanon sinulle, että jos itse olisit kantanut häntä
käsivarsillasi, kuten minä tein, niin olisit sinäkin tuntenut, että tuo
povi oli vain jäähmettynyt ja jäätynyt kuolonuneen, ja että veri sen
suonissa voi helposti uudelleen sulaa. Pidinhän häntä tykyttävällä
sydämelläni! Täytyihän hänen tuntea se, vaikka hän olikin kivettynyt!
Ja nyt oli hän herännyt näkemään, että minä olin kantanut hänet
pois kuuluakseni toiselle — oi, Jumalani, hän ei olisi koskaan
rakastanut minua, jos hän ei olisi tullut kysymään, olinko kokonaan
unhoittanut hänet!"

Sanomattoman surumielinen ilme kasvoillaan tuijotti hän lattiaan.

"Niin, minä en todellakaan voi moittia häntä siitä", sanoi hän ja


nyökäytti surullisesti pari kertaa päätään. "Mutta miksi toi hän
mukanaan inhoittavan seurueensa, käärmeen ja apinan? Viheriä
käärme oli kaulanauhan tavoin kiertynyt hänen kaulansa ympärille,
ja apina piteli kiinni hänen laahuksestaan hänen astuessaan
kabinettiin. Hän oli kietonut vihreän pukunsa, jonka olet nähnyt,
rintansa ja olkapäittensä ylitse ja kääriytynyt sen poimuihin, kuin olisi
hän värissyt vilusta. Nyt seisoi hän hetkisen hiljaa, ja minä huomasin
sangen hyvin, että hän näki minut avaimenkolon lävitse, sillä hän
nyökkäsi minulle päätään, ei kuitenkaan tylysti, vaan aivan kuin
ihmetellen, ettei saanut parempaa vastaanottoa. Mutta minä en
voinut poistua ovelta päästääkseni hänet sisään. Sen huomasi hänkin
selvästi, sillä minä näin, kuinka hän muuttui surullisemmaksi ja
huokasi useita kertoja. Mutta hän ei joutunut hämilleen, vaan otti
esiin pienen kuvastimen, jonka hän antoi apinalle, ja istui komeron
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like