Title:     BookKeeper Home
Notice:    Licensed to the Apache Software Foundation (ASF) under one
           or more contributor license agreements.  See the NOTICE file
           distributed with this work for additional information
           regarding copyright ownership.  The ASF licenses this file
           to you under the Apache License, Version 2.0 (the
           "License"); you may not use this file except in compliance
           with the License.  You may obtain a copy of the License at
           .
             http://www.apache.org/licenses/LICENSE-2.0
           .
           Unless required by applicable law or agreed to in writing,
           software distributed under the License is distributed on an
           "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
           KIND, either express or implied.  See the License for the
           specific language governing permissions and limitations
           under the License.

h2. What is BookKeeper?

BookKeeper is a replicated log service which can be used to build "replicated state machines":http://en.wikipedia.org/wiki/State_machine_replication. A log contains a sequence of events which can be applied to a "state machine":http://en.wikipedia.org/wiki/Finite-state_machine. BookKeeper guarantees that each replica state machine will see all the same entries, in the same order.

h2. Eh? What good is that to me?

Imagine for example that you have a database that you want to be able access even if the database server goes down. You'll need to replicate it to multiple servers. You need to ensure that if one database sees an update, all databases see the update. But what happens if one database server is cut off from the network for a time? Or if two clients try to update the same field at exactly the same instance? This is where a replicated log comes in.

A database can be seen as a state machine. It is the sum of all the updates which is has applied since its initial state. Therefore, if you consider your replicated database as a replicated statemachine, you can do the replication using a replicated log service. If all updates are written to the log replication service before being applied to the database, then the database will continue to be available and consistent even if some of the replicas fail.

This approach can be applied to many types of distributed systems, such as messaging systems, coordination systems, filesystems, etc.

h2. What BookKeeper is not?

BookKeeper has nothing to do with application/error/trace logging. There are "already":http://logging.apache.org/log4j/2.x/ "many":http://www.slf4j.org/ "projects":http://logback.qos.ch/ dedicated to that problem.

BookKeeper does not provide leader election. You'll need to use something like "Zookeeper":http://zookeeper.apache.org for that.

h2. More information

Learn more about BookKeeper on the "BookKeeper Wiki":https://cwiki.apache.org/confluence/display/BOOKKEEPER/BookKeeper.

h2. Getting Involved

Apache BookKeeper is an open source volunteer project under the Apache Software Foundation. We encourage you to learn about the project and contribute your expertise. Here are some starter links:

<!--# See our "How to Contribute to ZooKeeper":https://cwiki.apache.org/confluence/display/ZOOKEEPER/HowToContribute page.//-->

# Give us "feedback":https://issues.apache.org/jira/browse/BOOKKEEPER: What can we do better?
# Join the "mailing list":./lists.html: Meet the community.
 
