All posts by dotte

How to install Tomcat on CentOS

How to Install Tomcat 8 on CentOS 7.0 (Multiple Instances)

https://www.howtoforge.com/how-to-install-tomcat-on-centos-7

Install Oracle Java JDK 8 On CentOS 7

yum install java-1.8.0-openjdk.x86_64

# java -version

# cd /usr/share
# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.9/bin/apache-tomcat-8.0.9.tar.gz
# tar zxvf apache-tomcat-8.0.9.tar.gz

# groupadd tomcat
# useradd -g tomcat -s /bin/bash -d /usr/share/apache-tomcat-8.0.9 tomcat
# chown -Rf tomcat.tomcat /usr/share/apache-tomcat-8.0.9/

# su – tomcat

$ cd bin
$ ./startup.sh

start the service: sh startup.sh or ./startup.sh

stop the service sh :shutdown.sh or ./shutdown.sh

netstat -an | grep 8080

ps -ef  | grep tomcat

kill

tomcat修改默认端口:

<connector port=”80“protocol=”HTTP/1.1″connectionTimeout=”20000”      redirectPort=”8443″/>

tomcat设置IP地址或者域名访问

<Host name=”www.mydomain.com”  appBase=”webapps”     unpackWARs=”true”/>

SSL免费证书申请:

腾讯云 SSL证书管理

tomcat 配置SSl:

conf/server.xml中

<Connector
protocol=”org.apache.coyote.http11.Http11NioProtocol”
port=”443″ maxThreads=”200″
scheme=”https” secure=”true” SSLEnabled=”true”
keystoreFile=”conf/xxx.jks” keystorePass=”password”
clientAuth=”false” sslProtocol=”TLS”/>

49个权威的网上学习资源网站

艺术与音乐

  • Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。
  • Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。
  • Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。

数学,数据科学与工程

设计,网页设计与开发

  • HOW Design University — 主要教授图像与交互设计。
  • HTML Dog — 学习 HTML, CSS 和 JavaScript 编程技能。
  • Skillcrush — 提供职业网页设计与开发课程。
  • Hack Design — 全球顶级设计师教你网页/app设计,完全免费。

综合

  • Scratch – Imagine, Program, Share — 为小孩子设计,通过游戏学编程。
  • Udemy — 通过教学视频教你生活和工作中的实用技能,需要付费。
  • E-learning for kids — 向5-12岁的儿童提供小学程度基础课程。
  • Ed2go — 又一个学习技能的线上课程网站,主要面向成年人。
  • GCF Learn Free — 由 Goodwill Community Foundation 和 Goodwill Industries 创办,教授实用技能。(我已经词穷了。。)
  • Stack Exchange — 嘿!一个类似果壳问答的超赞的问答网站,回答质量都超级高。
  • HippoCampus — 主要面向中学生。
  • Howcast — 通过视频学习日常生活小技能。
  • Memrise — 用游戏化的概念学习语言。
  • SchoolTube — 面向中小学生,称有50万视频。。
  • Instructables — 一个DIY网站。
  • creativeLIVE — 教你摄影、音乐、设计等技能,要付费。
  • Do It Yourself — 教你成为家居改造达人。
  • Adafruit Learning System — 提供免费电子设备DIY教程。
  • Grovo — 学习如何使用上百种网站应用,提高自己的工作效率。

大学课程

IT与软件开发

语言类

  • Duolingo – 中文名「多邻国」,据说学习方式非常有效。我感觉它的app设计得不错。主要推荐英语和别的欧洲语言。(@秋纫 补充)
  • lernu.net – 在多邻国的世界语课程出来之前,这应该是学习世界语最好的网站了吧。不过,它除了课程以外还有一个挺好玩的社区,和一些阅读材料。(@秋纫 补充)

原创翻译,作者 @watterfall 英文地址:50 Top Online Learning Sites

from:http://www.techug.com/49-learn-online-website-resources

Kafka深度解析

背景介绍

Kafka简介

Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
  • 同时支持离线数据处理和实时数据处理

为什么要用消息系统

  • 解耦
    在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
  • 冗余
    有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在被许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理过程明确的指出该消息已经被处理完毕,确保你的数据被安全的保存直到你使用完毕。
  • 扩展性
    因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的;只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。
  • 灵活性 & 峰值处理能力
    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
  • 可恢复性
    当体系的一部分组件失效,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。而这种允许重试或者延后处理请求的能力通常是造就一个略感不便的用户和一个沮丧透顶的用户之间的区别。
  • 送达保证
    消息队列提供的冗余机制保证了消息能被实际的处理,只要一个进程读取了该队列即可。在此基础上,IronMQ提供了一个”只送达一次”保证。无论有多少进程在从队列中领取数据,每一个消息只能被处理一次。这之所以成为可能,是因为获取一个消息只是”预定”了这个消息,暂时把它移出了队列。除非客户端明确的表示已经处理完了这个消息,否则这个消息会被放回队列中去,在一段可配置的时间之后可再次被处理。
  • 顺序保证
    在大多使用场景下,数据处理的顺序都很重要。消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。IronMO保证消息通过FIFO(先进先出)的顺序来处理,因此消息在队列中的位置就是从队列中检索他们的位置。
  • 缓冲
    在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行—写入队列的处理会尽可能的快速,而不受从队列读的预备处理的约束。该缓冲有助于控制和优化数据流经过系统的速度。
  • 理解数据流
    在一个分布式系统里,要得到一个关于用户操作会用多长时间及其原因的总体印象,是个巨大的挑战。消息队列通过消息被处理的频率,来方便的辅助确定那些表现不佳的处理过程或领域,这些地方的数据流都不够优化。
  • 异步通信
    很多时候,你不想也不需要立即处理消息。消息队列提供了异步处理机制,允许你把一个消息放入队列,但并不立即处理它。你想向队列中放入多少消息就放多少,然后在你乐意的时候再去处理它们。

常用Message Queue对比

  • RabbitMQ
    RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
  • Redis
    Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
  • ZeroMQ
    ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据流的传输(Storm从0.9版本开始同时支持ZeroMQ和Netty作为传输模块)。
  • ActiveMQ
    ActiveMQ是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。
  • Kafka/Jafka
    Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

Kafka解析

Terminology

  • Broker
    Kafka集群包含一个或多个服务器,这种服务器被称为broker
  • Topic
    每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
  • Partition
    parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件
  • Producer
    负责发布消息到Kafka broker
  • Consumer
    消费消息。每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。

Kafka架构


如上图所示,一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU、memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

Push vs. Pull

作为一个messaging system,Kafka遵循了传统的方式,选择由producer向broker push消息并由consumer从broker pull消息。一些logging-centric system,比如Facebook的Scribe和Cloudera的Flume,采用非常不同的push模式。事实上,push模式和pull模式各有优劣。
push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。

Topic & Partition

Topic在逻辑上可以被认为是一个queue。每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以水平扩展,物理上把topic分成一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件。

每个日志文件都是“log entries”序列,每一个log entry包含一个4字节整型数(值为N),其后跟N个字节的消息体。每条消息都有一个当前partition下唯一的64字节的offset,它指明了这条消息的起始位置。磁盘上存储的消息格式如下:
message length : 4 bytes (value: 1+4+n)
“magic” value : 1 byte
crc : 4 bytes
payload : n bytes
这个“log entries”并非由一个文件构成,而是分成多个segment,每个segment名为该segment第一条消息的offset和“.kafka”组成。另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围,如下图所示。

因为每条消息都被append到该partition中,是顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)。

每一条消息被发送到broker时,会根据paritition规则选择被存储到哪一个partition。如果partition规则设置的合理,所有消息可以均匀分布到不同的partition里,这样就实现了水平扩展。(如果一个topic对应一个文件,那这个文件所在的机器I/O将会成为这个topic的性能瓶颈,而partition解决了这个问题)。在创建topic时可以在$KAFKA_HOME/config/server.properties中指定这个partition的数量(如下所示),当然也可以在topic创建之后去修改parition数量。

# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=3

在发送一条消息时,可以指定这条消息的key,producer根据这个key和partition机制来判断将这条消息发送到哪个parition。paritition机制可以通过指定producer的paritition. class这一参数来指定,该class必须实现kafka.producer.Partitioner接口。本例中如果key可以被解析为整数则将对应的整数与partition总数取余,该消息会被发送到该数对应的partition。(每个parition都会有个序号)

import kafka.producer.Partitioner;
import kafka.utils.VerifiableProperties;

public class JasonPartitioner<T> implements Partitioner {

    public JasonPartitioner(VerifiableProperties verifiableProperties) {}

    @Override
    public int partition(Object key, int numPartitions) {
        try {
            int partitionNum = Integer.parseInt((String) key);
            return Math.abs(Integer.parseInt((String) key) % numPartitions);
        } catch (Exception e) {
            return Math.abs(key.hashCode() % numPartitions);
        }
    }
}

如果将上例中的class作为partition.class,并通过如下代码发送20条消息(key分别为0,1,2,3)至topic2(包含4个partition)。

public void sendMessage() throws InterruptedException{
  for(int i = 1; i <= 5; i++){
        List messageList = new ArrayList<KeyedMessage<String, String>>();
        for(int j = 0; j < 4; j++){
            messageList.add(new KeyedMessage<String, String>("topic2", j+"", "The " + i + " message for key " + j));
        }
        producer.send(messageList);
    }
  producer.close();
}

则key相同的消息会被发送并存储到同一个partition里,而且key的序号正好和partition序号相同。(partition序号从0开始,本例中的key也正好从0开始)。如下图所示。

对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略去删除旧数据。一是基于时间,二是基于partition文件大小。例如可以通过配置$KAFKA_HOME/config/server.properties,让Kafka删除一周前的数据,也可通过配置让Kafka在partition文件超过1GB时删除旧数据,如下所示。

  ############################# Log Retention Policy #############################

# The following configurations control the disposal of log segments. The policy can
# be set to delete segments after a period of time, or after a given size has accumulated.
# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
# from the end of the log.

# The minimum age of a log file to be eligible for deletion
log.retention.hours=168

# A size-based retention policy for logs. Segments are pruned from the log as long as the remaining
# segments don't drop below log.retention.bytes.
#log.retention.bytes=1073741824

# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824

# The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000

# By default the log cleaner is disabled and the log retention policy will default to 
#just delete segments after their retention expires.
# If log.cleaner.enable=true is set the cleaner will be enabled and individual logs 
#can then be marked for log compaction.
log.cleaner.enable=false

这里要注意,因为Kafka读取特定消息的时间复杂度为O(1),即与文件大小无关,所以这里删除文件与Kafka性能无关,选择怎样的删除策略只与磁盘以及具体的需求有关。另外,Kafka会为每一个consumer group保留一些metadata信息—当前消费的消息的position,也即offset。这个offset由consumer控制。正常情况下consumer会在消费完一条消息后线性增加这个offset。当然,consumer也可将offset设成一个较小的值,重新消费一些消息。因为offet由consumer控制,所以Kafka broker是无状态的,它不需要标记哪些消息被哪些consumer过,不需要通过broker去保证同一个consumer group只有一个consumer能消费某一条消息,因此也就不需要锁机制,这也为Kafka的高吞吐率提供了有力保障。

Replication & Leader election

Kafka从0.8开始提供partition级别的replication,replication的数量可在$KAFKA_HOME/config/server.properties中配置。

default.replication.factor = 1

该 Replication与leader election配合提供了自动的failover机制。replication对Kafka的吞吐率是有一定影响的,但极大的增强了可用性。默认情况下,Kafka的replication数量为1。  每个partition都有一个唯一的leader,所有的读写操作都在leader上完成,leader批量从leader上pull数据。一般情况下partition的数量大于等于broker的数量,并且所有partition的leader均匀分布在broker上。follower上的日志和其leader上的完全一样。
和大部分分布式系统一样,Kakfa处理失败需要明确定义一个broker是否alive。对于Kafka而言,Kafka存活包含两个条件,一是它必须维护与Zookeeper的session(这个通过Zookeeper的heartbeat机制来实现)。二是follower必须能够及时将leader的writing复制过来,不能“落后太多”。
leader会track“in sync”的node list。如果一个follower宕机,或者落后太多,leader将把它从”in sync” list中移除。这里所描述的“落后太多”指follower复制的消息落后于leader后的条数超过预定值,该值可在$KAFKA_HOME/config/server.properties中配置

#If a replica falls more than this many messages behind the leader, the leader will remove the follower from ISR and treat it as dead
replica.lag.max.messages=4000

#If a follower hasn't sent any fetch requests for this window of time, the leader will remove the follower from ISR (in-sync replicas) and treat it as dead
replica.lag.time.max.ms=10000  

需要说明的是,Kafka只解决”fail/recover”,不处理“Byzantine”(“拜占庭”)问题。
一条消息只有被“in sync” list里的所有follower都从leader复制过去才会被认为已提交。这样就避免了部分数据被写进了leader,还没来得及被任何follower复制就宕机了,而造成数据丢失(consumer无法消费这些数据)。而对于producer而言,它可以选择是否等待消息commit,这可以通过request.required.acks来设置。这种机制确保了只要“in sync” list有一个或以上的flollower,一条被commit的消息就不会丢失。
这里的复制机制即不是同步复制,也不是单纯的异步复制。事实上,同步复制要求“活着的”follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率(高吞吐率是Kafka非常重要的一个特性)。而异步复制方式下,follower异步的从leader复制数据,数据只要被leader写入log就被认为已经commit,这种情况下如果follwer都落后于leader,而leader突然宕机,则会丢失数据。而Kafka的这种使用“in sync” list的方式则很好的均衡了确保数据不丢失以及吞吐率。follower可以批量的从leader复制数据,这样极大的提高复制性能(批量写磁盘),极大减少了follower与leader的差距(前文有说到,只要follower落后leader不太远,则被认为在“in sync” list里)。

上文说明了Kafka是如何做replication的,另外一个很重要的问题是当leader宕机了,怎样在follower中选举出新的leader。因为follower可能落后许多或者crash了,所以必须确保选择“最新”的follower作为新的leader。一个基本的原则就是,如果leader不在了,新的leader必须拥有原来的leader commit的所有消息。这就需要作一个折衷,如果leader在标明一条消息被commit前等待更多的follower确认,那在它die之后就有更多的follower可以作为新的leader,但这也会造成吞吐率的下降。
一种非常常用的选举leader的方式是“majority vote”(“少数服从多数”),但Kafka并未采用这种方式。这种模式下,如果我们有2f+1个replica(包含leader和follower),那在commit之前必须保证有f+1个replica复制完消息,为了保证正确选出新的leader,fail的replica不能超过f个。因为在剩下的任意f+1个replica里,至少有一个replica包含有最新的所有消息。这种方式有个很大的优势,系统的latency只取决于最快的几台server,也就是说,如果replication factor是3,那latency就取决于最快的那个follower而非最慢那个。majority vote也有一些劣势,为了保证leader election的正常进行,它所能容忍的fail的follower个数比较少。如果要容忍1个follower挂掉,必须要有3个以上的replica,如果要容忍2个follower挂掉,必须要有5个以上的replica。也就是说,在生产环境下为了保证较高的容错程度,必须要有大量的replica,而大量的replica又会在大数据量下导致性能的急剧下降。这就是这种算法更多用在Zookeeper这种共享集群配置的系统中而很少在需要存储大量数据的系统中使用的原因。例如HDFS的HA feature是基于majority-vote-based journal,但是它的数据存储并没有使用这种expensive的方式。
实际上,leader election算法非常多,比如Zookeper的Zab, RaftViewstamped Replication。而Kafka所使用的leader election算法更像微软的PacificA算法。
Kafka在Zookeeper中动态维护了一个ISR(in-sync replicas) set,这个set里的所有replica都跟上了leader,只有ISR里的成员才有被选为leader的可能。在这种模式下,对于f+1个replica,一个Kafka topic能在保证不丢失已经ommit的消息的前提下容忍f个replica的失败。在大多数使用场景中,这种模式是非常有利的。事实上,为了容忍f个replica的失败,majority vote和ISR在commit前需要等待的replica数量是一样的,但是ISR需要的总的replica的个数几乎是majority vote的一半。
虽然majority vote与ISR相比有不需等待最慢的server这一优势,但是Kafka作者认为Kafka可以通过producer选择是否被commit阻塞来改善这一问题,并且节省下来的replica和磁盘使得ISR模式仍然值得。

上文提到,在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某一个partition的所有replica都挂了,就无法保证数据不丢失了。这种情况下有两种可行的方案:

  • 等待ISR中的任一个replica“活”过来,并且选它作为leader
  • 选择第一个“活”过来的replica(不一定是ISR中的)作为leader

这就需要在可用性和一致性当中作出一个简单的平衡。如果一定要等待ISR中的replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中的所有replica都无法“活”过来了,或者数据都丢失了,这个partition将永远不可用。选择第一个“活”过来的replica作为leader,而这个replica不是ISR中的replica,那即使它并不保证已经包含了所有已commit的消息,它也会成为leader而作为consumer的数据源(前文有说明,所有读写都由leader完成)。Kafka0.8.*使用了第二种方式。根据Kafka的文档,在以后的版本中,Kafka支持用户通过配置选择这两种方式中的一种,从而根据不同的使用场景选择高可用性还是强一致性。

上文说明了一个parition的replication过程,然尔Kafka集群需要管理成百上千个partition,Kafka通过round-robin的方式来平衡partition从而避免大量partition集中在了少数几个节点上。同时Kafka也需要平衡leader的分布,尽可能的让所有partition的leader均匀分布在不同broker上。另一方面,优化leadership election的过程也是很重要的,毕竟这段时间相应的partition处于不可用状态。一种简单的实现是暂停宕机的broker上的所有partition,并为之选举leader。实际上,Kafka选举一个broker作为controller,这个controller通过watch Zookeeper检测所有的broker failure,并负责为所有受影响的parition选举leader,再将相应的leader调整命令发送至受影响的broker,过程如下图所示。

这样做的好处是,可以批量的通知leadership的变化,从而使得选举过程成本更低,尤其对大量的partition而言。如果controller失败了,幸存的所有broker都会尝试在Zookeeper中创建/controller->{this broker id},如果创建成功(只可能有一个创建成功),则该broker会成为controller,若创建不成功,则该broker会等待新controller的命令。

Consumer group

(本节所有描述都是基于consumer hight level API而非low level API)。
每一个consumer实例都属于一个consumer group,每一条消息只会被同一个consumer group里的一个consumer实例消费。(不同consumer group可以同时消费同一条消息)

很多传统的message queue都会在消息被消费完后将消息删除,一方面避免重复消费,另一方面可以保证queue的长度比较少,提高效率。而如上文所将,Kafka并不删除已消费的消息,为了实现传统message queue消息只被消费一次的语义,Kafka保证保证同一个consumer group里只有一个consumer会消费一条消息。与传统message queue不同的是,Kafka还允许不同consumer group同时消费同一条消息,这一特性可以为消息的多元化处理提供了支持。实际上,Kafka的设计理念之一就是同时提供离线处理和实时处理。根据这一特性,可以使用Storm这种实时流处理系统对消息进行实时在线处理,同时使用Hadoop这种批处理系统进行离线处理,还可以同时将数据实时备份到另一个数据中心,只需要保证这三个操作所使用的consumer在不同的consumer group即可。下图展示了Kafka在Linkedin的一种简化部署。

为了更清晰展示Kafka consumer group的特性,笔者作了一项测试。创建一个topic (名为topic1),创建一个属于group1的consumer实例,并创建三个属于group2的consumer实例,然后通过producer向topic1发送key分别为1,2,3r的消息。结果发现属于group1的consumer收到了所有的这三条消息,同时group2中的3个consumer分别收到了key为1,2,3的消息。如下图所示。

Consumer Rebalance

(本节所讲述内容均基于Kafka consumer high level API)
Kafka保证同一consumer group中只有一个consumer会消费某条消息,实际上,Kafka保证的是稳定状态下每一个consumer实例只会消费某一个或多个特定partition的数据,而某个partition的数据只会被某一个特定的consumer实例所消费。这样设计的劣势是无法让同一个consumer group里的consumer均匀消费数据,优势是每个consumer不用都跟大量的broker通信,减少通信开销,同时也降低了分配难度,实现也更简单。另外,因为同一个partition里的数据是有序的,这种设计可以保证每个partition里的数据也是有序被消费。
如果某consumer group中consumer数量少于partition数量,则至少有一个consumer会消费多个partition的数据,如果consumer的数量与partition数量相同,则正好一个consumer消费一个partition的数据,而如果consumer的数量多于partition的数量时,会有部分consumer无法消费该topic下任何一条消息。
如下例所示,如果topic1有0,1,2共三个partition,当group1只有一个consumer(名为consumer1)时,该 consumer可消费这3个partition的所有数据。

增加一个consumer(consumer2)后,其中一个consumer(consumer1)可消费2个partition的数据,另外一个consumer(consumer2)可消费另外一个partition的数据。

再增加一个consumer(consumer3)后,每个consumer可消费一个partition的数据。consumer1消费partition0,consumer2消费partition1,consumer3消费partition2

再增加一个consumer(consumer4)后,其中3个consumer可分别消费一个partition的数据,另外一个consumer(consumer4)不能消费topic1任何数据。

此时关闭consumer1,剩下的consumer可分别消费一个partition的数据。

接着关闭consumer2,剩下的consumer3可消费2个partition,consumer4可消费1个partition。

再关闭consumer3,剩下的consumer4可同时消费topic1的3个partition。

consumer rebalance算法如下:

  • Sort PT (all partitions in topic T)
  • Sort CG(all consumers in consumer group G)
  • Let i be the index position of Ci in CG and let N=size(PT)/size(CG)
  • Remove current entries owned by Ci from the partition owner registry
  • Assign partitions from iN to (i+1)N-1 to consumer Ci
  • Add newly assigned partitions to the partition owner registry

目前consumer rebalance的控制策略是由每一个consumer通过Zookeeper完成的。具体的控制方式如下:

  • Register itself in the consumer id registry under its group.
  • Register a watch on changes under the consumer id registry.
  • Register a watch on changes under the broker id registry.
  • If the consumer creates a message stream using a topic filter, it also registers a watch on changes under the broker topic registry.
  • Force itself to rebalance within in its consumer group.在这种策略下,每一个consumer或者broker的增加或者减少都会触发consumer rebalance。因为每个consumer只负责调整自己所消费的partition,为了保证整个consumer group的一致性,所以当一个consumer触发了rebalance时,该consumer group内的其它所有consumer也应该同时触发rebalance。

目前(2015-01-19)最新版(0.8.2)Kafka采用的是上述方式。但该方式有不利的方面:

  • Herd effect
    任何broker或者consumer的增减都会触发所有的consumer的rebalance
  • Split Brain
    每个consumer分别单独通过Zookeeper判断哪些partition down了,那么不同consumer从Zookeeper“看”到的view就可能不一样,这就会造成错误的reblance尝试。而且有可能所有的consumer都认为rebalance已经完成了,但实际上可能并非如此。

根据Kafka官方文档,Kafka作者正在考虑在还未发布的0.9.x版本中使用中心协调器(coordinator)。大体思想是选举出一个broker作为coordinator,由它watch Zookeeper,从而判断是否有partition或者consumer的增减,然后生成rebalance命令,并检查是否这些rebalance在所有相关的consumer中被执行成功,如果不成功则重试,若成功则认为此次rebalance成功(这个过程跟replication controller非常类似,所以我很奇怪为什么当初设计replication controller时没有使用类似方式来解决consumer rebalance的问题)。流程如下:

消息Deliver guarantee

通过上文介绍,想必读者已经明天了producer和consumer是如何工作的,以及Kafka是如何做replication的,接下来要讨论的是Kafka如何确保消息在producer和consumer之间传输。有这么几种可能的delivery guarantee:

  • At most once 消息可能会丢,但绝不会重复传输
  • At least one 消息绝不会丢,但可能会重复传输
  • Exactly once 每条消息肯定会被传输一次且仅传输一次,很多时候这是用户所想要的。Kafka的delivery guarantee semantic非常直接。当producer向broker发送消息时,一旦这条消息被commit,因数replication的存在,它就不会丢。但是如果producer发送数据给broker后,遇到的网络问题而造成通信中断,那producer就无法判断该条消息是否已经commit。这一点有点像向一个自动生成primary key的数据库表中插入数据。虽然Kafka无法确定网络故障期间发生了什么,但是producer可以生成一种类似于primary key的东西,发生故障时幂等性的retry多次,这样就做到了Exactly one。截止到目前(Kafka 0.8.2版本,2015-01-25),这一feature还并未实现,有希望在Kafka未来的版本中实现。(所以目前默认情况下一条消息从producer和broker是确保了At least once,但可通过设置producer异步发送实现At most once)。
    接下来讨论的是消息从broker到consumer的delivery guarantee semantic。(仅针对Kafka consumer high level API)。consumer在从broker读取消息后,可以选择commit,该操作会在Zookeeper中存下该consumer在该partition下读取的消息的offset。该consumer下一次再读该partition时会从下一条开始读取。如未commit,下一次读取的开始位置会跟上一次commit之后的开始位置相同。当然可以将consumer设置为autocommit,即consumer一旦读到数据立即自动commit。如果只讨论这一读取消息的过程,那Kafka是确保了Exactly once。但实际上实际使用中consumer并非读取完数据就结束了,而是要进行进一步处理,而数据处理与commit的顺序在很大程度上决定了消息从broker和consumer的delivery guarantee semantic。
  • 读完消息先commit再处理消息。这种模式下,如果consumer在commit后还没来得及处理消息就crash了,下次重新开始工作后就无法读到刚刚已提交而未处理的消息,这就对应于At most once
  • 读完消息先处理再commit。这种模式下,如果处理完了消息在commit之前consumer crash了,下次重新开始工作时还会处理刚刚未commit的消息,实际上该消息已经被处理过了。这就对应于At least once。在很多情况使用场景下,消息都有一个primary key,所以消息的处理往往具有幂等性,即多次处理这一条消息跟只处理一次是等效的,那就可以认为是Exactly once。(人个感觉这种说法有些牵强,毕竟它不是Kafka本身提供的机制,而且primary key本身不保证操作的幂等性。而且实际上我们说delivery guarantee semantic是讨论被处理多少次,而非处理结果怎样,因为处理方式多种多样,我们的系统不应该把处理过程的特性—如是否幂等性,当成Kafka本身的feature)
  • 如果一定要做到Exactly once,就需要协调offset和实际操作的输出。精典的做法是引入两阶段提交。如果能让offset和操作输入存在同一个地方,会更简洁和通用。这种方式可能更好,因为许多输出系统可能不支持两阶段提交。比如,consumer拿到数据后可能把数据放到HDFS,如果把最新的offset和数据本身一起写到HDFS,那就可以保证数据的输出和offset的更新要么都完成,要么都不完成,间接实现Exactly once。(目前就high level API而言,offset是存于Zookeeper中的,无法存于HDFS,而low level API的offset是由自己去维护的,可以将之存于HDFS中)
    总之,Kafka默认保证At least once,并且允许通过设置producer异步提交来实现At most once。而Exactly once要求与目标存储系统协作,幸运的是Kafka提供的offset可以使用这种方式非常直接非常容易。

Benchmark

纸上得来终觉浅,绝知些事要躬行。笔者希望能亲自测一下Kafka的性能,而非从网上找一些测试数据。所以笔者曾在0.8发布前两个月做过详细的Kafka0.8性能测试,不过很可惜测试报告不慎丢失。所幸在网上找到了Kafka的创始人之一的Jay Kreps的bechmark。以下描述皆基于该benchmark。(该benchmark基于Kafka0.8.1)

测试环境

该benchmark用到了六台机器,机器配置如下

  • Intel Xeon 2.5 GHz processor with six cores
  • Six 7200 RPM SATA drives
  • 32GB of RAM
  • 1Gb Ethernet这6台机器其中3台用来搭建Kafka broker集群,另外3台用来安装Zookeeper及生成测试数据。6个drive都直接以非RAID方式挂载。实际上kafka对机器的需求与Hadoop的类似。

producer吞吐率

该项测试只测producer的吞吐率,也就是数据只被持久化,没有consumer读数据。

1个producer线程,无replication

在这一测试中,创建了一个包含6个partition且没有replication的topic。然后通过一个线程尽可能快的生成50 million条比较短(payload100字节长)的消息。测试结果是821,557 records/second78.3MB/second)。
之所以使用短消息,是因为对于消息系统来说这种使用场景更难。因为如果使用MB/second来表征吞吐率,那发送长消息无疑能使得测试结果更好。
整个测试中,都是用每秒钟delivery的消息的数量乘以payload的长度来计算MB/second的,没有把消息的元信息算在内,所以实际的网络使用量会比这个大。对于本测试来说,每次还需传输额外的22个字节,包括一个可选的key,消息长度描述,CRC等。另外,还包含一些请求相关的overhead,比如topic,partition,acknowledgement等。这就导致我们比较难判断是否已经达到网卡极限,但是把这些overhead都算在吞吐率里面应该更合理一些。因此,我们已经基本达到了网卡的极限。
初步观察此结果会认为它比人们所预期的要高很多,尤其当考虑到Kafka要把数据持久化到磁盘当中。实际上,如果使用随机访问数据系统,比如RDBMS,或者key-velue store,可预期的最高访问频率大概是5000到50000个请求每秒,这和一个好的RPC层所能接受的远程请求量差不多。而该测试中远超于此的原因有两个。

  • Kafka确保写磁盘的过程是线性磁盘I/O,测试中使用的6块廉价磁盘线性I/O的最大吞吐量是822MB/second,这已经远大于1Gb网卡所能带来的吞吐量了。许多消息系统把数据持久化到磁盘当成是一个开销很大的事情,这是因为他们对磁盘的操作都不是线性I/O。
  • 在每一个阶段,Kafka都尽量使用批量处理。如果想了解批处理在I/O操作中的重要性,可以参考David Patterson的”Latency Lags Bandwidth

1个producer线程,3个异步replication

该项测试与上一测试基本一样,唯一的区别是每个partition有3个replica(所以网络传输的和写入磁盘的总的数据量增加了3倍)。每一个broker即要写作为leader的partition,也要读(从leader读数据)写(将数据写到磁盘)作为follower的partition。测试结果为786,980 records/second75.1MB/second)。
该项测试中replication是异步的,也就是说broker收到数据并写入本地磁盘后就acknowledge producer,而不必等所有replica都完成replication。也就是说,如果leader crash了,可能会丢掉一些最新的还未备份的数据。但这也会让message acknowledgement延迟更少,实时性更好。
这项测试说明,replication可以很快。整个集群的写能力可能会由于3倍的replication而只有原来的三分之一,但是对于每一个producer来说吞吐率依然足够好。

1个producer线程,3个同步replication

该项测试与上一测试的唯一区别是replication是同步的,每条消息只有在被in sync集合里的所有replica都复制过去后才会被置为committed(此时broker会向producer发送acknowledgement)。在这种模式下,Kafka可以保证即使leader crash了,也不会有数据丢失。测试结果为421,823 records/second40.2MB/second)。
Kafka同步复制与异步复制并没有本质的不同。leader会始终track follower replica从而监控它们是否还alive,只有所有in sync集合里的replica都acknowledge的消息才可能被consumer所消费。而对follower的等待影响了吞吐率。可以通过增大batch size来改善这种情况,但为了避免特定的优化而影响测试结果的可比性,本次测试并没有做这种调整。

3个producer,3个异步replication

该测试相当于把上文中的1个producer,复制到了3台不同的机器上(在1台机器上跑多个实例对吞吐率的增加不会有太大帮忙,因为网卡已经基本饱和了),这3个producer同时发送数据。整个集群的吞吐率为2,024,032 records/second193,0MB/second)。

Producer Throughput Vs. Stored Data

消息系统的一个潜在的危险是当数据能都存于内存时性能很好,但当数据量太大无法完全存于内存中时(然后很多消息系统都会删除已经被消费的数据,但当消费速度比生产速度慢时,仍会造成数据的堆积),数据会被转移到磁盘,从而使得吞吐率下降,这又反过来造成系统无法及时接收数据。这样就非常糟糕,而实际上很多情景下使用queue的目的就是解决数据消费速度和生产速度不一致的问题。
但Kafka不存在这一问题,因为Kafka始终以O(1)的时间复杂度将数据持久化到磁盘,所以其吞吐率不受磁盘上所存储的数据量的影响。为了验证这一特性,做了一个长时间的大数据量的测试,下图是吞吐率与数据量大小的关系图。

上图中有一些variance的存在,并可以明显看到,吞吐率并不受磁盘上所存数据量大小的影响。实际上从上图可以看到,当磁盘数据量达到1TB时,吞吐率和磁盘数据只有几百MB时没有明显区别。
这个variance是由Linux I/O管理造成的,它会把数据缓存起来再批量flush。上图的测试结果是在生产环境中对Kafka集群做了些tuning后得到的,这些tuning方法可参考这里

consumer吞吐率

需要注意的是,replication factor并不会影响consumer的吞吐率测试,因为consumer只会从每个partition的leader读数据,而与replicaiton factor无关。同样,consumer吞吐率也与同步复制还是异步复制无关。

1个consumer

该测试从有6个partition,3个replication的topic消费50 million的消息。测试结果为940,521 records/second89.7MB/second)。
可以看到,Kafkar的consumer是非常高效的。它直接从broker的文件系统里读取文件块。Kafka使用sendfile API来直接通过操作系统直接传输,而不用把数据拷贝到用户空间。该项测试实际上从log的起始处开始读数据,所以它做了真实的I/O。在生产环境下,consumer可以直接读取producer刚刚写下的数据(它可能还在缓存中)。实际上,如果在生产环境下跑I/O stat,你可以看到基本上没有物理“读”。也就是说生产环境下consumer的吞吐率会比该项测试中的要高。

3个consumer

将上面的consumer复制到3台不同的机器上,并且并行运行它们(从同一个topic上消费数据)。测试结果为2,615,968 records/second249.5MB/second)。
正如所预期的那样,consumer的吞吐率几乎线性增涨。

Producer and Consumer

上面的测试只是把producer和consumer分开测试,而该项测试同时运行producer和consumer,这更接近使用场景。实际上目前的replication系统中follower就相当于consumer在工作。
该项测试,在具有6个partition和3个replica的topic上同时使用1个producer和1个consumer,并且使用异步复制。测试结果为795,064 records/second75.8MB/second)。
可以看到,该项测试结果与单独测试1个producer时的结果几乎一致。所以说consumer非常轻量级。

消息长度对吞吐率的影响

上面的所有测试都基于短消息(payload 100字节),而正如上文所说,短消息对Kafka来说是更难处理的使用方式,可以预期,随着消息长度的增大,records/second会减小,但MB/second会有所提高。下图是records/second与消息长度的关系图。

正如我们所预期的那样,随着消息长度的增加,每秒钟所能发送的消息的数量逐渐减小。但是如果看每秒钟发送的消息的总大小,它会随着消息长度的增加而增加,如下图所示。

从上图可以看出,当消息长度为10字节时,因为要频繁入队,花了太多时间获取锁,CPU成了瓶颈,并不能充分利用带宽。但从100字节开始,我们可以看到带宽的使用逐渐趋于饱和(虽然MB/second还是会随着消息长度的增加而增加,但增加的幅度也越来越小)。

端到端的Latency

上文中讨论了吞吐率,那消息传输的latency如何呢?也就是说消息从producer到consumer需要多少时间呢?该项测试创建1个producer和1个consumer并反复计时。结果是,2 ms (median), 3ms (99th percentile, 14ms (99.9th percentile)
(这里并没有说明topic有多少个partition,也没有说明有多少个replica,replication是同步还是异步。实际上这会极大影响producer发送的消息被commit的latency,而只有committed的消息才能被consumer所消费,所以它会最终影响端到端的latency)

重现该benchmark

如果读者想要在自己的机器上重现本次benchmark测试,可以参考本次测试的配置和所使用的命令
实际上Kafka Distribution提供了producer性能测试工具,可通过bin/kafka-producer-perf-test.sh脚本来启动。所使用的命令如下

Producer
Setup
bin/kafka-topics.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --create --topic test-rep-one --partitions 6 --replication-factor 1
bin/kafka-topics.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --create --topic test --partitions 6 --replication-factor 3

Single thread, no replication

bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test7 50000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196

Single-thread, async 3x replication

bin/kafktopics.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --create --topic test --partitions 6 --replication-factor 3
bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test6 50000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196

Single-thread, sync 3x replication

bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test 50000000 100 -1 acks=-1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=64000

Three Producers, 3x async replication
bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test 50000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196

Throughput Versus Stored Data

bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test 50000000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196

Effect of message size

for i in 10 100 1000 10000 100000;
do
echo ""
echo $i
bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test $((1000*1024*1024/$i)) $i -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=128000
done;

Consumer
Consumer throughput

bin/kafka-consumer-perf-test.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --messages 50000000 --topic test --threads 1

3 Consumers

On three servers, run:
bin/kafka-consumer-perf-test.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --messages 50000000 --topic test --threads 1

End-to-end Latency

bin/kafka-run-class.sh kafka.tools.TestEndToEndLatency esv4-hcl198.grid.linkedin.com:9092 esv4-hcl197.grid.linkedin.com:2181 test 5000

Producer and consumer

bin/kafka-run-class.sh org.apache.kafka.clients.tools.ProducerPerformance test 50000000 100 -1 acks=1 bootstrap.servers=esv4-hcl198.grid.linkedin.com:9092 buffer.memory=67108864 batch.size=8196

bin/kafka-consumer-perf-test.sh --zookeeper esv4-hcl197.grid.linkedin.com:2181 --messages 50000000 --topic test --threads 1

broker配置如下

############################# Server Basics #############################

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0

############################# Socket Server Settings #############################

# The port the socket server listens on
port=9092

# Hostname the broker will bind to and advertise to producers and consumers.
# If not set, the server will bind to all interfaces and advertise the value returned from
# from java.net.InetAddress.getCanonicalHostName().
#host.name=localhost

# The number of threads handling network requests
num.network.threads=4

# The number of threads doing disk I/O
num.io.threads=8

# The send buffer (SO_SNDBUF) used by the socket server
socket.send.buffer.bytes=1048576

# The receive buffer (SO_RCVBUF) used by the socket server
socket.receive.buffer.bytes=1048576

# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600


############################# Log Basics #############################

# The directory under which to store log files
log.dirs=/grid/a/dfs-data/kafka-logs,/grid/b/dfs-data/kafka-logs,/grid/c/dfs-data/kafka-logs,/grid/d/dfs-data/kafka-logs,/grid/e/dfs-data/kafka-logs,/grid/f/dfs-data/kafka-logs

# The number of logical partitions per topic per server. More partitions allow greater parallelism
# for consumption, but also mean more files.
num.partitions=8

############################# Log Flush Policy #############################

# The following configurations control the flush of data to disk. This is the most
# important performance knob in kafka.
# There are a few important trade-offs here:
#    1. Durability: Unflushed data is at greater risk of loss in the event of a crash.
#    2. Latency: Data is not made available to consumers until it is flushed (which adds latency).
#    3. Throughput: The flush is generally the most expensive operation. 
# The settings below allow one to configure the flush policy to flush data after a period of time or
# every N messages (or both). This can be done globally and overridden on a per-topic basis.

# Per-topic overrides for log.flush.interval.ms
#log.flush.intervals.ms.per.topic=topic1:1000, topic2:3000

############################# Log Retention Policy #############################

# The following configurations control the disposal of log segments. The policy can
# be set to delete segments after a period of time, or after a given size has accumulated.
# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
# from the end of the log.

# The minimum age of a log file to be eligible for deletion
log.retention.hours=168

# A size-based retention policy for logs. Segments are pruned from the log as long as the remaining
# segments don't drop below log.retention.bytes.
#log.retention.bytes=1073741824

# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=536870912

# The interval at which log segments are checked to see if they can be deleted according 
# to the retention policies
log.cleanup.interval.mins=1

############################# Zookeeper #############################

# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=esv4-hcl197.grid.linkedin.com:2181

# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=1000000

# metrics reporter properties
kafka.metrics.polling.interval.secs=5
kafka.metrics.reporters=kafka.metrics.KafkaCSVMetricsReporter
kafka.csv.metrics.dir=/tmp/kafka_metrics
# Disable csv reporting by default.
kafka.csv.metrics.reporter.enabled=false

replica.lag.max.messages=10000000

读者也可参考另外一份Kafka性能测试报告

参考

from:http://www.jasongj.com/2015/03/10/KafkaColumn1/

北大清华推荐的100本经典书籍

北大清华推荐的100本经典书籍,荟萃了历史、人文、经济、心理、商业等领域的精华。 

1、《追寻生命的意义》

作者:弗兰克尔

弗兰克尔是20世纪著名的心理学家,纳粹时期,作为犹太人,他的全家都被关进了奥斯威辛集中营,他的父母、妻子、哥哥,全都死于毒气室中,只有他和妹妹幸存。弗兰克尔不但超越了这炼狱般的痛苦,更将自己的经验与学术结合,开创了意义疗法,替人们找到绝处再生的意义。本书第一部分叙述了弗兰克尔的集中营经历,第二部分阐述了他的“意义疗法”。本书不仅适合于心理学爱好者,也适合面临挑战希望寻找生活意义的人们。

2、《拖延心理学》

作者: [美]简·博克/ [美]莱诺拉·袁 

你想要向拖延的恶习开刀吗?这两位加利福尼亚心理学家在她们治疗拖延者的实践中精准地捕捉到了拖延的根本原因。这本书可以帮助读者减轻拖延,更好地享受生活。

3、《梦的解析》

作者: [奥地利]弗洛伊德 

弗洛伊德的《梦的解析》被誉为精神分析的第一名著。它通过对梦境的科学探索和解释,找破了几千年来人类对梦的无知、迷信和秘感,同时揭示了左右人们思想和行为的潜意识的奥秘。不管你是否对心理学感兴趣,这本书都会带给你看待人的精神世界的一个新的视角。

4、《宽容》

作者: [美]房龙 

在宽容与不宽容之间,宗教以血腥和仁慈维护着它几千年的统治,更迭变幻、不滞不流。从众神的黄昏到好奇的人,从宗教裁判所到新天堂,从耶稣基督到布鲁诺……历史席卷一切,也记忆一切。而在这一切之后,始终不离其左右,是利益抑或是人性?这是一部宗教的历史,一部宽容与不宽容的历史,也是一郜人性血腥与进步的历史。文图之间,《宽容》生动地再现了这一历史。

5、《如何阅读一本书》

作者:[美]莫提默·艾德勒 /查尔斯·范多 

你会阅读吗?莫提默·艾德勒告诉你,阅读并非那么简单。不懂阅读的人,初探阅读的人,读这本书可以少走冤枉路。对阅读有所体会的人,读这本书可以有更深的印证和领悟。本书介绍了阅读的三个层次,对每个层次都进行了细致的指导,是一本非常实用的读书用手册。

6、《影响力》

[美]罗伯特·B·西奥迪尼 

影响力是改变他人思想和行动的能力。政治家运用影响力来赢得选举,商人运用影响力来兜售商品,推销员运用影响力诱惑你乖乖地把金钱捧上… 人们对影响力的运用存在于社会的每个角落,当一个要求用不同的方式提出来时,你的反应就会不知不觉地从负面抵抗变成积极合作,你为什么会说“是”,这一转变中究竟蕴涵着怎样的心理策略? 《影响力》这本妙趣横生的书可以告诉你。

7、《政府论》

作者: [英]洛克

《政府论》英国约翰·洛克的政治著作,出版于1690年。本书可视为政治学的研究范畴,但对法学研究而言,此书亦属必读之列。《政府论》汇集了洛克的主要政治哲学思想,不仅使洛克成为古典自由主义思想的集大成者,而且对于后世的现实政治产生了深远的影响.

8、《红楼梦》

作者:曹雪芹

如果说每一个西方人心中都有一个哈姆雷特,那么每一个中国人心中都有他自己的贾宝玉、林黛玉、薛宝钗。这本书以宝黛钗三人的爱情故事为线索,展开了一个繁复盛大的封建大家庭的世界。远不止此,儒家、道家、佛家的思想都在此体现,历史学家、文学家、哲学家都在书里看到了他们想要看到的,古代的人情世故所有的一切也让我们这些二千年传统文化的共享人感到如此地接近。

9、《设计心理学》

作者: [美]唐纳德·A·诺曼 

本书是对产品设计感兴趣同学的必读书。诺曼博士本书中强调以使用者为中心的设计哲学,提醒消费者在挑选的物品,必须要方便好用,易于理解,希望设计师在注重设计美感的同时,不要忽略设计的一些必要因素,因为对于产品设计来说,安全好用永远是竞争的关键。虽然本书讨论的是日常用品的设计,但是其思想同样适合于互联网产品的设计,建议计算机相关专业的同学阅读。

10、《小王子》

作者:[法]圣埃克苏佩里 

圣埃克苏佩里是一个传奇飞行家,他的书中以一位飞行员作为故事叙述者,讲述了小王子从自己星球出发前往地球的过程中,所经历的各种历险。小王子的孩子式的眼光,看到了成人的空虚、盲目和愚妄,记下了人类的孤独寂寞、没有根基随风流浪的命运。本质的言语、本真的视角,也带给许许多多人感动和向往。

11、《策略思维》

作者: 迪克西特 /奈尔伯夫 

耶鲁大学教授奈尔伯夫和普林斯顿大学教授迪克西特的这本著作,用许多活生生的例子,向没有经济学基础的读者展示了博弈论策略思维的道理。人生是一个永不停息的决策过程。从事什么样的工作,怎样打理一宗生意,该和谁结婚,怎样将孩子抚养成人,要不要竞争总裁的位置,都是这类决策的例子。这本书不仅适合对博弈论感兴趣的同学,也同样适合所有希望让生活决策更有条理的同学。

12、《无价》

作者: [美]威廉·庞德斯通 

为什么免费的巧克力让我们疯狂?为什么百老汇剧场里价格越高的位置卖得越火?为什么100万美元带来的愉悦感,400万美元才能让它翻倍?为什么议价时,一定要抢先报价,而且一定要狮子大开口?威廉·庞德斯通告诉我们答案:价格只是一场集体幻觉。如果你想了解价格的奥秘,就来读这本书吧!

13、《浅薄》

作者: [美]尼古拉斯·卡尔

“谷歌在把我们变傻吗?”当尼古拉斯•卡尔在发表于《大西洋月刊》上赫赫有名的那篇封面文章中提出这个问题的时候,他就开启了人们热切渴望的期盼源泉,让人急于弄清楚互联网是在如何改变我们的。卡尔在本书中阐述了他对互联网时代的看法:互联网会在现代人的心智中打下深深的烙印。这本书会让你看到互联网对我们的影响的另一面。

14、《定位》

作者: [美]艾·里斯/杰克·特劳特 

20多年前,美国《广告时代》杂志约请年轻的营销专家里斯和特劳特撰写一系列有关营销和广告新思维的文章,总标题就是“定位的时代”。系列文章刊载之后,引起全行业的轰动,定位成了营销界人人谈论的热闹话题,经作者之手送出的文章就达12万份之多,由此开创了营销理论全面创新的时代。20年过去,定位思想已经深入人心,成为营销中必须考虑的要素。本书适合所有对商业感兴趣的同学阅读。

15、《史记》

作者:司马迁

“朴素凝炼、简洁利落,无枝蔓之疾;浑然天成、滴水不漏,增一字不容;遣词造句,煞费苦心,减一字不能”——柳宗元 
”使百代而下,史家不能易其法,学者不能易其书。六经之后,惟有此书”——梁启超 
“史家之绝唱,无韵之《离骚》”——鲁迅 
面对这本记录着中华之根的煌煌巨著,你还等什么?

16、《社会契约论》

作者: [法]卢梭 

《社会契约论》是法国思想家让•雅克•卢梭于1762年写成的一本书。《社会契约论》中主权在民的思想,是现代民主制度的基石,深刻地影响了逐步废除欧洲君主绝对权力的运动,和18世纪末北美殖民地摆脱英帝国统治、建立民主制度的斗争。美国的《独立宣言》和法国的《人权宣言》及两国的宪法均体现了《社会契约论》的民主思想。

18、《伦理学》

作者: 斯宾诺莎

《伦理学》一书是斯宾诺莎一生哲学思想的结晶。该书所阐述的实体、属性和样式的学说,是17世纪西欧先进的唯物主义哲学思想发展的总结。它肯定了唯一独立存在的自然物质实体是各种物体相互联系的整体,坚持了从世界本身来说明世界的唯物主义观点。斯宾诺莎《伦理学》一书所阐发的哲学思想在近现代欧洲哲学史上产生了多方面的影响。黑格尔就曾经明确地提出,要研究哲学,就必须首先作一个斯宾诺莎主义者。马克思在他的哲学著作中,也经常把斯宾诺莎作为近代哲学史上唯物主义和辩证法的杰出代表。

19、《目送》

作者: 龙应台

《目送》共由七十四篇散文组成,是为一本极具亲情、感人至深的文集。由父亲的逝世、母亲的苍老、儿子的离开、朋友的牵挂、兄弟的携手共行,写出失败和脆弱、失落和放手,写出缠绵不舍和绝然的虚无。作者平淡朴实的文笔、真诚深挚的情感和传统现代的思考,都让人感觉身心放松、恍若相通,值得一读。

20、《欢乐的经济学》

作者:戴维·亨德森 

这是一本通过对作者亲身经历进行生动有趣的分析,向读者普及经济学思维、传达自由至上理念的书。本书的作者是一名专业经济学家,致力于传播自由经济与市场经济的理念。

21、《一九八四》

作者: [英]乔治·奥威尔 

这一部奥威尔的传世之作,堪称世界文坛上最著名的政治讽喻小说。他在小说中他创造的“老大哥”、“双重思想”、“新话”等词汇都已收入权威的英语词典,甚至由他的姓衍生了一个形容词“奥威尔式”不断出现在报道国际新闻的记者笔下,足见其在英语国家影响之深远。

22、《雪国》

作者: [日]川端康成 

年轻的少年在多雪的岛国与两个女子,发生了平淡的故事,然而川端康成笔下唯美的情景与诗意的语言,让这本书打动无数人心灵。空灵境界,遥远人物,哀伤故事,是川端康成的永恒主题。《雪国》中东方式的虚无充满了日本古典文学传统,而人物的描绘又带给人强烈的真实感。

23、《孙子兵法》

作者:孙武

《孙子兵法》又称《孙武兵法》、《吴孙子兵法》、《孙子兵书》、《孙武兵书》等,英文名为《The Art of War》,是中国古典军事文化遗产中的璀璨瑰宝,是中国优秀文化传统的重要组成部分,是世界三大兵书之一。

24、《Facebook效应》

作者: [美]大卫·柯克帕特里克 

本书叙述了Facebook如何从哈佛的宿舍里萌发,创始人的内讧,权力之争,如何放弃华盛顿邮报的投资,怎样争取到第一个广告客户,而第一轮融资又如何获得一亿美元的估值…… 作者近距离地采访了与Facebook相关的人士,其中包括Facebook的创始人、员工、投资人、意向投资人以及合作伙伴,加起来超过了130人。这是真切详实的访谈,更是超级精彩的故事。Facebook 作为一个传奇企业,值得所有希望了解互联网和新媒体的同学深入了解。

25、《历史研究》

作者: 汤因比

汤因比在本书中将人类史作为一个整体来加以考察,以极其宏大的视角展现了诸多文明的成长、碰撞、融合的历程,在这一令人着迷的历史画卷中,作者以其博大精深的历史学知识和哲学睿智为读者带来了吸收知识和进行思考的快乐——这本书或许言辞难懂,但并不晦涩,对于一个想借上帝之眼来看人类古今历史的人,这本书是最合适的选择之一。

26、《论美国的民主》

作者: [法]托克维尔 

《论美国的民主》这本书是世界学术界第一部对美国社会、政治制度和民情进行社会学研究的著作,也是第一部论述民主制度的专著,19世纪最著名的社会学著作之一,同时,它也是当代青年不可不读的经典名著之一。

27、《资本论》

作者: [德]马克思 

《资本论》是马克思用毕生的心血写成的一部光辉灿烂的科学巨著,这部巨著第一次深刻地分析了资本主义的全部发展过程,以数学般的准确性证明这一发展的方向必然引导到社会主义革命和无产阶级专政的确立。研究各种学科的知识分子都应读读这部巨著。

28、《长尾理论》

作者: [美]克里斯·安德森 

本书讲述了互联网时代如何改变了长尾的经济价值。 本书中阐述,商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”(hits)的头部; 而是那条代表“冷门商品”(misses)经常为人遗忘的长尾。 比如,亚马逊网络书店的销售额有四分之一来自于排名10万之后的书籍。本书适合所有希望了解产品与市场的同学阅读。

29、《理想国》

作者: [古希腊]柏拉图 

柏拉图认为,正义的城邦城理想国必须具备三个条件。第一,统治者应从有才能的人中挑选出来,可以是男人,也可以是女人。第地一,统治者阶层应过公社生活。第三,国王应该是哲学家,或应该让哲学家做国王,因为只有哲学家才具备治理国家应有的知识。阅读此书,不仅可以在提问与回答、定义与反驳的过程中锻炼哲学思辨的能力,深入钻研其中重要的哲学问题,同时也能得到一种对其优美文体的享受。

30、《菊花与刀》

作者: [美]鲁斯·本尼迪克特 

《菊花与刀》的前身是一份研究报告——作者受美国战时情报局委托写的有关日本的研究报告。后来在原报告基础上加上前后两章,即成此书。此书于1946年发表后反响巨大,亦成为日本最畅销的图书之一,因其学术价值和借鉴意义,60多年后依然长销不衰,成为文化人类学的典范之作,是了解我们一衣带水的近邻——日本民族的绕不过的经典读本。

31、《山海经》 

中国先秦古书,富于神话传说的最古老的地理书,中国的许多传统故事根源都在《山海经》之中,其对古代历史、地理、文化、中外交通、民俗、神话等研究,均有重要的参考价值。一代又一代士人的启蒙书籍,也是我们这个时代的人回溯本源所应当读的。

32、《经济学原理》

作者: [美] N.格里高利·曼昆 

曼昆的《经济学原理》是世界上最流行的经济学教材。现代社会中经济与每个人的生活都密切相关,所有的大学生都该懂点经济学,而这本书无疑是最受欢迎的经济学入门经典。

33、《悲惨世界》

作者: [法]雨果 

故事的主线围绕主人公获释罪犯冉•阿让试图赎罪的历程,融进了法国的历史、建筑、政治、道德哲学、法律、正义、宗教信仰。文中真实的故事,丰富的人物内心和故事包涵的深刻意义,使读者们都体会到作品有一种深远的分量感,也让一代代的人深深感动。

34、《芙蓉镇》

作者: 古华

古华借位于湘、粤、桂三省交界处的芙蓉镇上,一个人称“芙蓉姐”的漂亮女人胡玉音在“四清运动”及“文化大革命”中的坎坷遭遇,向我们展示了特定历史时期人民生活的升迁沉浮。数十年间整个国家的人所承受的痛苦和欢乐,更重要的是后来人对这些事情痛苦和欢乐的思考,教会我们不要忘记。

35、《平凡的世界》

作者: 路遥

这一本呕心沥血写成的百万字的长篇巨著全景式地表现中国当代城乡社会生活。路遥在中国70年代中期到80年代中期近十年间的广阔背景上,通过复杂的矛盾纠葛,以孙少安和孙少平两兄弟为代表展开了劳动与爱情、挫折与追求、痛苦与欢乐、日常生活与巨大社会冲突纷繁地交织在一起,深刻地展示了普通人在大时代历史进程中所走过的艰难曲折的道路,故事的广阔和深刻可谓是改革开放以来最可读的书之一。

36、《老人与海》

作者: [美]海明威 

《老人与海》是海明威最著名的作品之一,它围绕一位老年古巴渔夫,与一条巨大的马林鱼在离岸很远的湾流中搏斗的故事。海明威电报式的简洁有力的写作风格,“冰山”原则指导下的荡人心魄描写,都在这片文章中得到了淋漓尽致的展现。海上捕鱼老人的拼搏、勇毅、不屈服,让每个人心中都波涛汹涌。

37、《乌合之众:大众心理研究》

作者: [法]古斯塔夫·勒庞 

这本书是社会心理学领域的经典著作,至今已被翻译成近20种语言出版。在书中,作者以十分简约的方式,考察了群体的特殊心理与思维方式,尤其对个人与群体的迥异心理进行了精辟分析。二战中日本普通民众如何变成丧尽天良的战争机器,“文革”中的单纯学生又为何会作出那许多丧心病狂的举动?个人到群体的变化总是叫人难以理解、难以置信,此书的解释,或能稍解你的困惑。

38、《红与黑》

作者:[法]司汤达

年轻人于连一步步向上爬却最终跌落谷底,法国批判现实主义之父司汤达借此批判法国封建贵族与新兴资产阶级的赤裸裸的斗争。与此同时,小说以深刻细腻的笔调充分展示了主人公的心灵空间,广泛运用了独白和自由联想等多种艺术手法挖掘出了于连深层意识的活动,开创了现代小说的写作风格。

39、《资治通鉴》

作者: 司马光

《资治通鉴》,简称“通鉴”,是北宋司马光主编的一部多卷本编年体史书,共294卷,历时19年告成。它以时间为纲,事件为目,是中国第一部编年体通史,在中国史书中占有极重要的地位。以史为镜,可以知兴衰,这本书毛泽东亲自批注了十七遍,你呢?

40、《战争论》

作者: [德]克劳塞维茨 

本书作者亲身参加过普法战争和法俄战争,积累了丰富的作战经验。他的思想还受到德国古典哲学的很大影响,这为他研究战争理论和写作此书提供了有利的主客观条件。作为西方军事史上的理论名著,它甚至受到过恩格斯和列宁的好评。正是这部著作最早提出了“战争是政治通过另一种手段(即暴力)的继续”这一著名的公理。

41、《惠普之道》

作者: [美]戴维·帕卡德 

《惠普之道》是惠普公司创始人戴维·帕卡德所写的创立惠普公司的故事,本书文笔通俗简练,前半部分叙述惠普公司的创业经历,后半部分阐释惠普公司的价值观、宗旨与做法。惠普公司是硅谷的纪念碑和常春藤,惠普公司以其健康的绩效、良好的企业环境得到了长足的发展。本书阐释的“惠普之道”被许多卓越的企业所效仿,本书是所有对创业和企业管理感兴趣的同学的必读书。

42《百年孤独》

作者: [哥伦比亚]加西亚·马尔克斯

这是一本艰涩难懂的书,通篇充满了怪异的人和离奇的故事,马尔克斯用马尔克斯在书中溶汇了南美洲特有的五彩缤纷的文化。他通过描写小镇马孔多的产生、兴盛到衰落、消亡,表现了拉丁美洲令人惊异的疯狂历史。在这本书中隐藏着许多关于拉美世界和现代文明的思考,其不可思议的奇迹和最纯粹的现实生活的结合,以及深入独到的笔力文风,使其成为文学史上巨著。

43、《人性的弱点》

作者: [美]戴尔·卡内基 

“世界成功学第一书”,戴尔·卡耐基被称为美国“成人教育之父”,他运用社会学和心理学知识,对人性进行了深刻的探讨和分析。他讲述的许多普通人通过奋斗获得成功的真实故事,激励了无数陷入迷茫和困境的人,帮助他们重新找到了自己的人生。不管成功学有怎样的缺陷,这些故事对于处于迷茫中的同学无疑是一种指引和帮助。

44、《爱的艺术》

[美]弗洛姆 

爱情是大学期间一门重要的必修课,心理学家弗洛姆这本著名的《爱的艺术》一定能够对你有所帮助。弗洛姆认为,不成熟的、幼稚的爱是“我爱你,因为我需要你。”,而成熟的爱是“我需要你,因为我爱你。”。希望从这本书中得到追求攻略的同学往往会失望,但是如果你静下心,就可以从本书中读出爱的艺术的真谛。

45、《正义论》

作者: [美]约翰·罗尔斯 

罗尔斯在《正义论》当中提出了关于正义的两条原则:第一条是所谓平等的自由原则,即每个人应该在社会中享有平等的自由权利;第二条原则包括差别原则与机会平等原则。前者要求在进行分配的时候,如果不得不产生某种不平等的话,这种不平等应该有利于境遇最差的人们的最大利益,就是说,利益分配应该像处于不利地位的人们倾斜;后者要求将机会平等的原则应用于社会经济的不平等,使具有同等能力、技术与动机的人们享有平等的获得职位的机会。

46、《心理学与生活》

作者: [美]理查德·格里格 

本书是心理学的入门经典,是美国斯坦福大学多年来使用的教材,也是在美国许多大学里推广使用的经典教材,被ETS推荐为GRE心理学专项考试的主要参考用书。这本书写作流畅,通俗易懂,深入生活,把心理学理论与知识联系人们的日常生活与工作,使它同样也成为一般人了解心理学与自己的极好的读物。

47、《玩偶之家》

作者: [挪威]易卜生

娜拉是个具有资产阶级个性解放思想的叛逆女性,伴随着一系列事件,她与丈夫海尔茂的矛盾逐渐激化直至两个人分手。她对社会的背叛和弃家出走,被誉为妇女解放的“独立宣言”,易卜生高超的戏剧创作手法也在这部著作中得到体现。

48、《生命是什么》

[奥]埃尔温·薛定谔 

理工科学生大概都对薛定谔耳熟能详,这位诺贝尔奖获得者撰写的《生命是什么》更是一本伟大的科学人文经典。这本书专为生命科学的门外汉书写,内容通俗易懂,历史证明这本书成为了推动分子生物学诞生的激励者和推动者。本书适合于任何希望增进科学素养的同学阅读。

49《西方的没落》

作者:[德]奥斯瓦尔德·斯宾格勒
《西方的没落》是著名史学家斯宾格勒上世纪初创作的一部史学巨著,素有“历史博物馆”之称。在书中斯宾格勒从宏大的文化比较形态学的角度以生物生长过程的观念进行历史研究,把世界历史分成八个完全发展的文化,细致考察其各个时期的不同现象,揭示其共同具有的产生、发展、衰亡及毁灭的过程,通过对西方文化的精神逻辑和时代症状的描述,预言西方文化终将走向没落。

50《论法的精神》

作者:[法]孟德斯鸠 

公认的十八世纪最伟大的、最深远地影响了历史的作品是哪几部?人们可以很轻易地说出亚当施密的《国富论》、卢梭的《社会契约论》和孟德斯鸠的《论法的精神》。《论法的精神》以法律为中心,又遍涉经济、政治、宗教、历史、地理等领域,内容极为丰富。《论法的精神》中提出的“追求自由”、“主张法制”、“三权分立”等理论,极大地影响了人类社会的发展进程,成为了美、英、法等国的立国之本。

《人的潜能和价值》

作者: [美]马斯洛等 

一个广为人知的理论认为,人脑有上千亿个细胞,其中98.5%-99%的细胞处于休眠状态,大约有1%-1.5%的细胞参加脑的神经功能活动,这说明人的潜能有极大的发挥空间。《人的潜能和价值》是人本主义心理学有关“人的潜能和价值”讨论的论文集。主要选录了马斯洛等有关人心理学价值观点的文章。这本书中收录了著名的马斯洛需求层次理论,该理论在心理学、管理学等众多领域影响很大。本书是希望开发自身潜能和价值的同学所必读的一本好书。

51《麦肯锡方法》

作者: [美]埃森?M?拉塞尔


《麦肯锡方法》披露了麦肯锡小心守护的一系列管理技巧——那些可以帮助任何水平的任何人像麦肯锡顾问一样思考的工具。这是一套你可以应用在任何社工、实习、团队管理中的方法,像你的咨询顾问一样,为你指出通向成功的解决方案。这是从事咨询行业的必读书,也是希望丰富管理素养、提升自身领导力的同学的良好参考。

52《人月神话》

作者: [美]弗雷德里克·布鲁克斯 

本书是软件工程领域的名著,为人们管理复杂项目提供了颇具洞察力的见解,既有很多发人深省的观点,也有大量的软件工程实践。如果你有志从事技术领域的管理工作,或者面临领导团队的工作,本书是你的必读之书。

《共产党宣言》

作者: [德]马克思 

《共产党宣言》又译《共产主义宣言》,是卡尔•马克思和弗里德里希•恩格斯为共产主义者同盟起草的纲领,国际共产主义运动第一个纲领性文献,马克思主义诞生的重要标志。由马克思执笔写成 。1848年2月在伦敦第一次以单行本问世。宣言第一次全面系统地阐述了科学社会主义理论,指出共产主义运动已成为不可抗拒的历史潮流。

《西行漫记》

作者:埃德加斯诺
《西行漫记(红星照耀中国)》是一部文笔优美的纪实性很强的报道性作品,被誉为研究中国革命的“经典的百科全书”。堪称“红色经典”中的经典。一个老外,深入延安,深入根据地,深入这片西方媒体眼中“土匪聚集的地方”,去真正了解一下“土匪”们的革命精神,去了解一下是什么让他们战无不胜,是什么让他们奋不顾身。结果,他的文字影响了千千万万的有志青年,使得延安成为那个时代的灯塔。七十多年后的今天,它的光芒和力量依旧还在。特别适合想窥探中国共产党历史的文艺青年拜读。

《自私的基因》

作者:[英]里查德·道金斯 

这是一本关于进化论的书,但是从这本书中读者可以获得关于人类行为的许多启发。道金斯使用“自私的基因”来表达基因中心的进化论观点。这种观点和基于物种或生物体的进化论观点不同,能够解释生物体之间的各种利他行为。

《西方美学史》

作者:朱光潜

一部美学史并不单一的只是纯粹美学理论的历史,而且还是人类心灵自我展现的历史,或者说,在那些看似抽象的理论背后,我们所感受到的乃是各个时代人类精神脉博的跳动,这是一种精神的还乡历程——请跟随朱光潜先生来一次西方美学的精神漫游吧。

《激荡三十年》

作者:吴晓波

本书记载了1978-2008年间中国的企业变革,作者没有用传统的教科书或历史书的方式来写作这部作品,而是站在民间的角度,以真切而激扬的写作手法描绘了中国企业在改革开放年代走向市场、走向世界的成长、发展之路。

《人间词话》

作者: 王国维

清末文史学和考证学的大师王国维先生留给了我们的《人间词话》是晚清以来最有影响的著作之一。这是一部接受了西洋美学思想之洗礼后,以崭新的眼光对中国旧文学所作的文学批评著作,在旧日诗词论著中,称得上一部屈指可数的作品。在以往词论界里,许多人把它奉为圭臬,把它的论点作为词学、美学的根据,影响很是深远。

《西方哲学史》

作者: [英]罗素 

本书作为西方哲学史的教科书,按照我们约定俗成的划分方式,讲述的是从公元前6世纪以后到公元20世纪之前的2500多年间,西方哲学产生、形成、发展和演变的历史过程。哲学乃是社会生活与政治生活的一个组成部分,它并非一个卓越的人做的孤立思考”,罗素对哲学史的权威论述使这部书成为每个人案头必备的哲学读本。

《非暴力沟通》

作者:[美]马歇尔·卢森堡 

良言一句三冬暖,恶语伤人二月寒。不正确的沟通方式不仅会导致对他人的伤害,也会导致无法进行有效的沟通。卢森堡博士在本书中揭示了那些长久被人忽视的沟通障碍,并总结了和谐有效的沟通方式。无论是同学之间、恋人之间、师生之间、同事之间,非暴力沟通方式都能帮助你进行有效的沟通。本书的内容非常易懂和实用,穿插出现的沟通练习帮助你随时演练书中的沟通原则,对于困扰于沟通的同学们,本书是不可不读的好书。

《高卢战记》

作者: [古罗马]凯撒 

《高卢战记》叙事翔实精确,文笔清晰简朴,历来很得到爱好罗马历史、拉丁文学和军事史等各方面人物的推崇。凯撒所写的《高卢战记》,共七卷,记述他在高卢作战的经过,从公元前58年至52年,每年的事迹写成一卷。凯撒死后,他的幕僚奥卢斯·伊尔久斯续写了第八卷,以补公元前51至52年的空缺。因此,《战记》又成为记述这些地区情况的最古老的历史文献,它对高卢和日耳曼各地区的从氏族公社逐渐解体、到萌芽状态国家出现这段时间里的政治、社会、风俗和宗教等记述,成为我们研究原始社会和民族学的重要依据。

《国富论》

作者:[英]亚当·斯密 

《国富论》被誉为西方经济学的”圣经”,经济学的百科全书,影响世界历史的十大著作本书之一,影响人类文化的100本书之一。这部著作是现代经济学的开山之作,后来的经济学家基本是沿着他的方法分析经济发展规律的,这部著作也奠定了资本主义自由经济的理论基础,第一次提出了市场经济会由“看不见的手”自行调节的理论。

《怪诞行为学》

作者:[美]丹·艾瑞里 

这是一本有趣的书,本书告诉你,你的非理性冲动都是有经济学支撑的! 丹·艾瑞里用轻松幽默的语言揭示了我们不可思议的行为背后的原因。如果你是一个冲动消费的同学,希望了解为什么自己会那么做,你该看看这本书,它会解开你的谜团。本书没有任何门槛,没有经济学专业知识的同学也可以从中收获甚多。

《批评官员的尺度》

作者: [美]安东尼·刘易斯 

这本书可以带给你一场理性精神的洗礼,是一次寻访理性的旅程。也许法律制度是不同的,文化源头是不同的,但是对理性的追求是人类共有的美德。不仅是新闻还是法律工作者还是普通读者,只要你想做一个现代社会的公民,你都可以而且应当把这本书当作一本政治启蒙书。

《大败局》

作者:吴晓波

这本书展示了国内著名企业的失败之路。这是一个令人激动的年代,无数的机会令人心动,一个伟大品派往往在一瞬间便打造而成;这也是一个冒险的年代,未知的风险又令每一个人不寒而畏,成功者往往在一瞬间灰飞烟灭。这本书与《激荡三十年》一样,是了解中国市场所不可不读的书。

《全球通史》

作者:[美] L. S.斯塔夫里阿诺斯 

斯塔夫里阿诺斯的这部潜心力作自1970年初版问世以来,赞誉如潮,被译成多种语言广为流传,可谓经典中的经典。听听阿诺德汤因比的评价吧,“《全球通史》给了我强烈的现实感:它是一种思想武器,可以用来救治我们现在所面临的由于陶醉于技术进步而产生的深重的精神危机;它有助于我们理解未来,包含各种可能性和选择的未来”。对于这本被选作北大历史系教材的历史名著,真的值得深度阅读。

《失控》

作者: [美]凯文·凯利 

这《失控》,全名为《失控:机器、社会与经济的新生物学》,是一部思考人类社会(或更一般意义上的复杂系统)进化的“大部头”著作,书中提到并且今天正在兴起或大热的概念包括:大众智慧、云计算、物联网、虚拟现实、敏捷开发、协作、双赢、共生、共同进化、网络社区、网络经济,等等。对于那些喜欢思考的的同学来说,阅读此书必然会开卷有益。

《通往奴役之路》

作者:[英]弗里德利希?冯?哈耶克 

这是一本古典自由主义经济学的经典名著,在哈耶克的学术生涯中占有重要的地位。哈耶克在这本书中论证道,当时正在计划中的福利国家不是为个人自由的战斗在和平时期的继续,倒是朝着专制的方向迈出了一步。因此,他认为追求计划经济,其无意识后果必然是极权主义。本书适合对政治经济学感兴趣的同学阅读。

《黑客与画家》

作者:[美] Paul Graham 

本书是硅谷创业之父Paul Graham 的文集,主要介绍优秀程序员的爱好和动机,讨论他们的成长、对世界的贡献以及编程语言和工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,迫使读者独立思考。本书适合所有互联网创业者和计算机相关专业的学生,也适合一切对计算机行业感兴趣的读者。

《纯粹理性批判》

作者:康德

本书是康德三大批判著作、也是其全部哲学著述中意义最为特殊和重大的巨著,它改变了整个西方哲学前进发展的方向和进程。贯彻始终的根本指导思想就是:通过对理性本身、即人类先天认识能力的批判考察,确定它有哪些先天的、即具有普遍性和必然性的要素,以及这些要素的来源、功能、条件、范围和界限,从而确定它能认识什么和不能认识什么,在这基础上对形而上学的命运和前途作出最终的判决和规定,其使命是为真正的、作为科学的形而上学提供坚实可靠的基础。

《浪潮之巅》

作者: 吴军

近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。在这些公司兴衰的背后,有着它必然的规律。本书不仅讲述科技工业的历史,更重在揭示它的规律性。 这是一本讲述 IT 行业历史的经典著作,作者吴军博士曾是 Google 公司的搜索专家,本书值得所有理工科学生和商科学生好好阅读。

《爱因斯坦文集》

作者: [美]爱因斯坦 

爱因斯坦文集分三卷,前两卷选编了爱因斯坦的论文以及科学哲学的论述;第三卷选编了爱因斯坦的社会政治言论,反应他的一般的世界观、人生观等价值观和他对所经历的历史时期重大政治事件的看法。爱因斯坦不仅是一个伟大的科学家、杰出的思想家,也是一个具有高度社会责任感的人,他的文集集中地反映了他的思想,是不可多得的科学人文读物。

《牛奶可乐经济学》

作者:[美]罗伯特·弗兰克 

为什么牛奶装在方盒子里卖,可乐却装在圆瓶子里卖?为什么很多酒吧喝水要钱,却又提供免费花生米?这不是一部让人读得头疼的教科书,而是一部点滴生活小智慧合集。作者擅长用经济学方法将生活中的故事娓娓道来,这是一部没有阅读门槛、却能从中获得生活智慧的另类经济学书籍。

《冰室合集》

作者:梁启超

梁启超曾带来维新改革的先声,也是中国近代以来最重要的文化人和学者,《饮冰室合集》是目前比较详备的梁启超著作集,也是研究近代中国政治、思想、文化的重要材料。先生的生平,先生的品格,先生的》思考,都将带给我们今天的年轻人不一样的启发。

《新教伦理与资本主义精神》

作者:[德]马克斯·韦伯 

资本主义的兴起不仅仅是一个经济和政治制度的综合体,它还有着特殊的精神风格和文化意义,其所呈显的特征处处和某种宗教上的伦理态度相互呼应,共同构成了现代人普遍的生活方式。本书从文化的角度考察近代资本主义的兴起,探讨近代资本主义在欧洲而不是其他大陆发轫和发展的根源,让读者看到隐藏在制度背后的精神力量,从另一个视角来重新认识这套西方花了数百年时间才酝酿出来的资本主义生活秩序。

《明夷待访录》

作者:黄宗羲

明末清初,有位伟大的思想家说:皇帝,是“天下之大害者”。他主张“无君”。这就是我国近古代民主主义启蒙思想家、爱国者黄宗羲。他的《明夷待访录》,比卢梭的《民约论》还要早100年光景,有人称它为“另一部《人权宣言》”。《明夷待访录》反对君主专制,主张民权,对清末的维新变法运动影响很大。本书的民权思想,一直影响到辛亥革命时期的孙中山、邹容和陈天华等等。对于这本书,我们致敬的最好方式,就是捧之阅读。

《性趣探秘》

作者:戴蒙德

这不是一本房中术秘籍,这是一本严肃书籍。《性趣探秘》力图解释人类的性行为是如何演变为现在的模式,包括女性的绝经期、人类社会中男性的角色、离群性交、为取乐的性交,以及女性乳房早于发挥喂乳功用时的隆起等。一些我们看来再自然不过、再平常不过的事情中,隐藏着生物进化的奥秘。本书语言平实,适合对生物进化论感兴趣的同学阅读。

《枪炮、病菌与钢铁》

作者:[美]贾雷德?戴蒙德 

《枪炮、病菌与钢铁》是一本关于生物演化的书,它是理解人类社会的一个重大进展,它记录了现代世界及其诸多不平等所以形成的原因。这是关于如何理解人类繁衍、扩张、发现、侵略的历史的一本书,内容恢弘大气,历史感强烈。该书于1998年获得普利策奖以及英国科普书奖。适合任何希望增进科学素养的同学阅读。

from:http://blog.sina.com.cn/s/blog_4a3f96780102e7v3.html

 

香港大学推荐的50本经典书籍

1、《追寻生命的意义》作者:弗兰克尔

    弗兰克尔是20世纪著名的心理学家,纳粹时期,作为犹太人,他的全家都被关进了奥斯威辛集中营,他的父母、妻子、哥哥,全都死于毒气室中,只有他和妹妹幸存。弗兰克尔不但超越了这炼狱般的痛苦,更将自己的经验与学术结合,开创了意义疗法,替人们找到绝处再生的意义。本书第一部分叙述了弗兰克尔的集中营经历,第二部分阐述了他的“意义疗法”。本书不仅适合于心理学爱好者,也适合面临挑战希望寻找生活意义的人们。

 

2、《拖延心理学》作者: [美]简·博克/ [美]莱诺拉·袁

    你想要向拖延的恶习开刀吗?这两位加利福尼亚心理学家在她们治疗拖延者的实践中精准地捕捉到了拖延的根本原因。这本书可以帮助读者减轻拖延,更好地享受生活。

 

3、《梦的解析》作者: [奥地利]弗洛伊德

    弗洛伊德的《梦的解析》被誉为精神分析的第一名著。它通过对梦境的科学探索和解释,找破了几千年来人类对梦的无知、迷信和秘感,同时揭示了左右人们思想和行为的潜意识的奥秘。不管你是否对心理学感兴趣,这本书都会带给你看待人的精神世界的一个新的视角。

 

4、《宽容》作者: [美]房龙

    在宽容与不宽容之间,宗教以血腥和仁慈维护着它几千年的统治,更迭变幻、不滞不流。从众神的黄昏到好奇的人,从宗教裁判所到新天堂,从耶稣基督到布鲁诺……历史席卷一切,也记忆一切。而在这一切之后,始终不离其左右,是利益抑或是人性?这是一部宗教的历史,一部宽容与不宽容的历史,也是一郜人性血腥与进步的历史。文图之间,《宽容》生动地再现了这一历史。

 

5、《如何阅读一本书》作者:[美]莫提默·艾德勒 /查尔斯·范多

    你会阅读吗?莫提默·艾德勒告诉你,阅读并非那么简单。不懂阅读的人,初探阅读的人,读这本书可以少走冤枉路。对阅读有所体会的人,读这本书可以有更深的印证和领悟。本书介绍了阅读的三个层次,对每个层次都进行了细致的指导,是一本非常实用的读书用手册。

 

6、《影响力》[美]罗伯特·B·西奥迪尼

    影响力是改变他人思想和行动的能力。政治家运用影响力来赢得选举,商人运用影响力来兜售商品,推销员运用影响力诱惑你乖乖地把金钱捧上……人们对影响力的运用存在于社会的每个角落,当一个要求用不同的方式提出来时,你的反应就会不知不觉地从负面抵抗变成积极合作,你为什么会说“是”,这一转变中究竟蕴涵着怎样的心理策略?《影响力》这本妙趣横生的书可以告诉你。

 

7、《政府论》作者: [英]洛克

    《政府论》英国约翰·洛克的政治著作,出版于1690年。本书可视为政治学的研究范畴,但对法学研究而言,此书亦属必读之列。《政府论》汇集了洛克的主要政治哲学思想,不仅使洛克成为古典自由主义思想的集大成者,而且对于后世的现实政治产生了深远的影响。

 

8、《人的潜能和价值》作者: [美]马斯洛等

    一个广为人知的理论认为,人脑有上千亿个细胞,其中98.5%-99%的细胞处于休眠状态,大约有1%-1.5%的细胞参加脑的神经功能活动,这说明人的潜能有极大的发挥空间。《人的潜能和价值》是人本主义心理学有关“人的潜能和价值”讨论的论文集。主要选录了马斯洛等有关人心理学价值观点的文章。这本书中收录了著名的马斯洛需求层次理论,该理论在心理学、管理学等众多领域影响很大。本书是希望开发自身潜能和价值的同学所必读的一本好书。

 

9、《设计心理学》作者: [美]唐纳德·A·诺曼

    本书是对产品设计感兴趣同学的必读书。诺曼博士本书中强调以使用者为中心的设计哲学,提醒消费者在挑选的物品,必须要方便好用,易于理解,希望设计师在注重设计美感的同时,不要忽略设计的一些必要因素,因为对于产品设计来说,安全好用永远是竞争的关键。虽然本书讨论的是日常用品的设计,但是其思想同样适合于互联网产品的设计,建议计算机相关专业的同学阅读。

 

10、《小王子》作者:[法]圣埃克苏佩里

    圣埃克苏佩里是一个传奇飞行家,他的书中以一位飞行员作为故事叙述者,讲述了小王子从自己星球出发前往地球的过程中,所经历的各种历险。小王子的孩子式的眼光,看到了成人的空虚、盲目和愚妄,记下了人类的孤独寂寞、没有根基随风流浪的命运。本质的言语、本真的视角,也带给许许多多人感动和向往。

 

11、《策略思维》作者:迪克西特 /奈尔伯夫

    耶鲁大学教授奈尔伯夫和普林斯顿大学教授迪克西特的这本著作,用许多活生生的例子,向没有经济学基础的读者展示了博弈论策略思维的道理。人生是一个永不停息的决策过程。从事什么样的工作,怎样打理一宗生意,该和谁结婚,怎样将孩子抚养成人,要不要竞争总裁的位置,都是这类决策的例子。这本书不仅适合对博弈论感兴趣的同学,也同样适合所有希望让生活决策更有条理的同学。

 

12、《无价》作者: [美]威廉·庞德斯通

    为什么免费的巧克力让我们疯狂?为什么百老汇剧场里价格越高的位置卖得越火?为什么100万美元带来的愉悦感,400万美元才能让它翻倍?为什么议价时,一定要抢先报价,而且一定要狮子大开口?威廉·庞德斯通告诉我们答案:价格只是一场集体幻觉。如果你想了解价格的奥秘,就来读这本书吧!

 

13、《浅薄》作者: [美]尼古拉斯·卡尔

    “谷歌在把我们变傻吗?”当尼古拉斯卡尔在发表于《大西洋月刊》上赫赫有名的那篇封面文章中提出这个问题的时候,他就开启了人们热切渴望的期盼源泉,让人急于弄清楚互联网是在如何改变我们的。卡尔在本书中阐述了他对互联网时代的看法:互联网会在现代人的心智中打下深深的烙印。这本书会让你看到互联网对我们的影响的另一面。

 

14、《定位》作者: [美]艾·里斯/杰克·特劳特

    20多年前,美国《广告时代》杂志约请年轻的营销专家里斯和特劳特撰写一系列有关营销和广告新思维的文章,总标题就是“定位的时代”。系列文章刊载之后,引起全行业的轰动,定位成了营销界人人谈论的热闹话题,经作者之手送出的文章就达12万份之多,由此开创了营销理论全面创新的时代。20年过去,定位思想已经深入人心,成为营销中必须考虑的要素。本书适合所有对商业感兴趣的同学阅读。

 

15、《麦肯锡方法》作者: [美]埃森M拉塞尔

    《麦肯锡方法》披露了麦肯锡小心守护的一系列管理技巧——那些可以帮助任何水平的任何人像麦肯锡顾问一样思考的工具。这是一套你可以应用在任何社工、实习、团队管理中的方法,像你的咨询顾问一样,为你指出通向成功的解决方案。这是从事咨询行业的必读书,也是希望丰富管理素养、提升自身领导力的同学的良好参考。

 

16、《社会契约论》作者: [法]卢梭

    《社会契约论》是法国思想家让雅克卢梭于1762年写成的一本书。《社会契约论》中主权在民的思想,是现代民主制度的基石,深刻地影响了逐步废除欧洲君主绝对权力的运动,和18世纪末北美殖民地摆脱英帝国统治、建立民主制度的斗争。美国的《独立宣言》和法国的《人权宣言》及两国的宪法均体现了《社会契约论》的民主思想。

 

17、《人月神话》作者: [美]弗雷德里克·布鲁克斯

    本书是软件工程领域的名著,为人们管理复杂项目提供了颇具洞察力的见解,既有很多发人深省的观点,也有大量的软件工程实践。如果你有志从事技术领域的管理工作,或者面临领导团队的工作,本书是你的必读之书。

 

18、《伦理学》作者:斯宾诺莎

    《伦理学》一书是斯宾诺莎一生哲学思想的结晶。该书所阐述的实体、属性和样式的学说,是17世纪西欧先进的唯物主义哲学思想发展的总结。它肯定了唯一独立存在的自然物质实体是各种物体相互联系的整体,更精彩分享请加扣扣:七六三一二八三九二!坚持了从世界本身来说明世界的唯物主义观点。斯宾诺莎《伦理学》一书所阐发的哲学思想在近现代欧洲哲学史上产生了多方面的影响。黑格尔就曾经明确地提出,要研究哲学,就必须首先作一个斯宾诺莎主义者。马克思在他的哲学著作中,也经常把斯宾诺莎作为近代哲学史上唯物主义和辩证法的杰出代表。

 

19、《目送》作者:龙应台

    《目送》共由七十四篇散文组成,是为一本极具亲情、感人至深的文集。由父亲的逝世、母亲的苍老、儿子的离开、朋友的牵挂、兄弟的携手共行,写出失败和脆弱、失落和放手,写出缠绵不舍和绝然的虚无。作者平淡朴实的文笔、真诚深挚的情感和传统现代的思考,都让人感觉身心放松、恍若相通,值得一读。

 

20、《欢乐的经济学》作者:戴维·亨德森

    这是一本通过对作者亲身经历进行生动有趣的分析,向读者普及经济学思维、传达自由至上理念的书。本书的作者是一名专业经济学家,致力于传播自由经济与市场经济的理念。

 

21、《一九八四》作者: [英]乔治·奥威尔

    这一部奥威尔的传世之作,堪称世界文坛上最著名的政治讽喻小说。他在小说中他创造的“老大哥”、“双重思想”、“新话”等词汇都已收入权威的英语词典,甚至由他的姓衍生了一个形容词“奥威尔式”不断出现在报道国际新闻的记者笔下,足见其在英语国家影响之深远。

 

22、《雪国》作者: [日]川端康成

    年轻的少年在多雪的岛国与两个女子,发生了平淡的故事,然而川端康成笔下唯美的情景与诗意的语言,让这本书打动无数人心灵。空灵境界,遥远人物,哀伤故事,是川端康成的永恒主题。《雪国》中东方式的虚无充满了日本古典文学传统,而人物的描绘又带给人强烈的真实感。

 

23、《自私的基因》作者:[英]里查德·道金斯

    这是一本关于进化论的书,但是从这本书中读者可以获得关于人类行为的许多启发。道金斯使用“自私的基因”来表达基因中心的进化论观点。这种观点和基于物种或生物体的进化论观点不同,能够解释生物体之间的各种利他行为。

 

24、《Facebook效应》作者: [美]大卫·柯克帕特里克

    本书叙述了Facebook如何从哈佛的宿舍里萌发,创始人的内讧,权力之争,如何放弃华盛顿邮报的投资,怎样争取到第一个广告客户,而第一轮融资又如何获得一亿美元的估值……作者近距离地采访了与Facebook相关的人士,更精彩分享请加扣扣:七六三一二八三九二!其中包括Facebook的创始人、员工、投资人、意向投资人以及合作伙伴,加起来超过了130人。这是真切详实的访谈,更是超级精彩的故事。Facebook 作为一个传奇企业,值得所有希望了解互联网和新媒体的同学深入了解。

 

25、《历史研究》作者:汤因比

    汤因比在本书中将人类史作为一个整体来加以考察,以极其宏大的视角展现了诸多文明的成长、碰撞、融合的历程,在这一令人着迷的历史画卷中,作者以其博大精深的历史学知识和哲学睿智为读者带来了吸收知识和进行思考的快乐——这本书或许言辞难懂,但并不晦涩,对于一个想借上帝之眼来看人类古今历史的人,这本书是最合适的选择之一。

 

26、《论美国的民主》作者: [法]托克维尔

    《论美国的民主》这本书是世界学术界第一部对美国社会、政治制度和民情进行社会学研究的著作,也是第一部论述民主制度的专著,19世纪最著名的社会学著作之一,同时,它也是当代青年不可不读的经典名著之一。

 

27、《西方美学史》作者:朱光潜

    一部美学史并不单一的只是纯粹美学理论的历史,而且还是人类心灵自我展现的历史,或者说,在那些看似抽象的理论背后,我们所感受到的乃是各个时代人类精神脉博的跳动,这是一种精神的还乡历程——请跟随朱光潜先生来一次西方美学的精神漫游吧。

 

28、《长尾理论》作者: [美]克里斯·安德森

    本书讲述了互联网时代如何改变了长尾的经济价值。本书中阐述,商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”(hits)的头部;而是那条代表“冷门商品”(misses)经常为人遗忘的长尾。比如,亚马逊网络书店的销售额有四分之一来自于排名10万之后的书籍。本书适合所有希望了解产品与市场的同学阅读。

 

29、《理想国》作者: [古希腊]柏拉图

    柏拉图认为,正义的城邦城理想国必须具备三个条件。第一,统治者应从有才能的人中挑选出来,可以是男人,也可以是女人。第二,统治者阶层应过公社生活。第三,国王应该是哲学家,或应该让哲学家做国王。

 

30、《菊花与刀》作者: [美]鲁斯·本尼迪克特

    《菊花与刀》的前身是一份研究报告——作者受美国战时情报局委托写的有关日本的研究报告。后来在原报告基础上加上前后两章,即成此书。此书于1946年发表后反响巨大,亦成为日本最畅销的图书之一,因其学术价值和借鉴意义,60多年后依然长销不衰,成为文化人类学的典范之作,是了解我们一衣带水的近邻——日本民族的绕不过的经典读本。

 

31、《激荡三十年》作者:吴晓波

    本书记载了1978-2008年间中国的企业变革,作者没有用传统的教科书或历史书的方式来写作这部作品,而是站在民间的角度,以真切而激扬的写作手法描绘了中国企业在改革开放年代走向市场、走向世界的成长、发展之路。

 

32、《经济学原理》作者: [美] N.格里高利·曼昆

    曼昆的《经济学原理》是世界上最流行的经济学教材。现代社会中经济与每个人的生活都密切相关,所有的大学生都该懂点经济学,而这本书无疑是最受欢迎的经济学入门经典。

 

33、《悲惨世界》作者: [法]雨果

    故事的主线围绕主人公获释罪犯冉阿让试图赎罪的历程,融进了法国的历史、建筑、政治、道德哲学、法律、正义、宗教信仰。文中真实的故事,丰富的人物内心和故事包涵的深刻意义,使读者们都体会到作品有一种深远的分量感,也让一代代的人深深感动。

 

34、《芙蓉镇》作者:古华

    古华借位于湘、粤、桂三省交界处的芙蓉镇上,一个人称“芙蓉姐”的漂亮女人胡玉音在“四清运动”及“文化大革命”中的坎坷遭遇,向我们展示了特定历史时期人民生活的升迁沉浮。数十年间整个国家的人所承受的痛苦和欢乐,更重要的是后来人对这些事情痛苦和欢乐的思考,教会我们不要忘记。

 

35、《平凡的世界》作者:路遥

    这一本呕心沥血写成的百万字的长篇巨著全景式地表现中国当代城乡社会生活。路遥在中国70年代中期到80年代中期近十年间的广阔背景上,通过复杂的矛盾纠葛,以孙少安和孙少平两兄弟为代表展开了劳动与爱情、挫折与追求、痛苦与欢乐、日常生活与巨大社会冲突纷繁地交织在一起,深刻地展示了普通人在大时代历史进程中所走过的艰难曲折的道路,故事的广阔和深刻可谓是改革开放以来最可读的书之一。

 

36、《老人与海》作者: [美]海明威

    《老人与海》是海明威最著名的作品之一,它围绕一位老年古巴渔夫,与一条巨大的马林鱼在离岸很远的湾流中搏斗的故事。海明威电报式的简洁有力的写作风格,“冰山”原则指导下的荡人心魄描写,都在这片文章中得到了淋漓尽致的展现。海上捕鱼老人的拼搏、勇毅、不屈服,让每个人心中都波涛汹涌。

 

37、《乌合之众:大众心理研究》作者: [法]古斯塔夫·勒庞

    这本书是社会心理学领域的经典著作,至今已被翻译成近20种语言出版。在书中,作者以十分简约的方式,考察了群体的特殊心理与思维方式,尤其对个人与群体的迥异心理进行了精辟分析。二战中日本普通民众如何变成丧尽天良的战争机器,更精彩分享请加扣扣:七六三一二八三九二!“文革”中的单纯学生又为何会作出那许多丧心病狂的举动?个人到群体的变化总是叫人难以理解、难以置信,此书的解释,或能稍解你的困惑。

 

38、《红与黑》作者:[法]司汤达

    年轻人于连一步步向上爬却最终跌落谷底,法国批判现实主义之父司汤达借此批判法国封建贵族与新兴资产阶级的赤裸裸的斗争。与此同时,小说以深刻细腻的笔调充分展示了主人公的心灵空间,广泛运用了独白和自由联想等多种艺术手法挖掘出了于连深层意识的活动,开创了现代小说的写作风格。

 

39、《人间词话》作者:王国维

    清末文史学和考证学的大师王国维先生留给了我们的《人间词话》是晚清以来最有影响的著作之一。这是一部接受了西洋美学思想之洗礼后,以崭新的眼光对中国旧文学所作的文学批评著作,在旧日诗词论著中,称得上一部屈指可数的作品。在以往词论界里,许多人把它奉为圭臬,把它的论点作为词学、美学的根据,影响很是深远。

 

40、《战争论》作者: [德]克劳塞维茨

    本书作者亲身参加过普法战争和法俄战争,积累了丰富的作战经验。他的思想还受到德国古典哲学的很大影响,这为他研究战争理论和写作此书提供了有利的主客观条件。作为西方军事史上的理论名著,它甚至受到过恩格斯和列宁的好评。正是这部著作最早提出了“战争是政治通过另一种手段(即暴力)的继续”这一著名的公理。

 

41、《惠普之道》作者: [美]戴维·帕卡德

    《惠普之道》是惠普公司创始人戴维·帕卡德所写的创立惠普公司的故事,本书文笔通俗简练,前半部分叙述惠普公司的创业经历,后半部分阐释惠普公司的价值观、宗旨与做法。惠普公司是硅谷的纪念碑和常春藤,惠普公司以其健康的绩效、良好的企业环境得到了长足的发展。本书阐释的“惠普之道”被许多卓越的企业所效仿,本书是所有对创业和企业管理感兴趣的同学的必读书。

 

42、《非暴力沟通》作者:[美]马歇尔·卢森堡

    良言一句三冬暖,恶语伤人二月寒。不正确的沟通方式不仅会导致对他人的伤害,也会导致无法进行有效的沟通。卢森堡博士在本书中揭示了那些长久被人忽视的沟通障碍,并总结了和谐有效的沟通方式。无论是同学之间、恋人之间、师生之间、同事之间,非暴力沟通方式都能帮助你进行有效的沟通。本书的内容非常易懂和实用,穿插出现的沟通练习帮助你随时演练书中的沟通原则,对于困扰于沟通的同学们,本书是不可不读的好书。

 

43、《人性的弱点》作者: [美]戴尔·卡内基

    “世界成功学第一书”,戴尔·卡耐基被称为美国“成人教育之父”,他运用社会学和心理学知识,对人性进行了深刻的探讨和分析。他讲述的许多普通人通过奋斗获得成功的真实故事,激励了无数陷入迷茫和困境的人,帮助他们重新找到了自己的人生。不管成功学有怎样的缺陷,这些故事对于处于迷茫中的同学无疑是一种指引和帮助。

 

44、《爱的艺术》[美]弗洛姆

    爱情是大学期间一门重要的必修课,心理学家弗洛姆这本著名的《爱的艺术》一定能够对你有所帮助。弗洛姆认为,不成熟的、幼稚的爱是“我爱你,因为我需要你。”,而成熟的爱是“我需要你,因为我爱你。”。希望从这本书中得到追求攻略的同学往往会失望,但是如果你静下心,就可以从本书中读出爱的艺术的真谛。

 

45、《正义论》作者: [美]约翰·罗尔斯

    罗尔斯在《正义论》当中提出了关于正义的两条原则:第一条是所谓平等的自由原则,即每个人应该在社会中享有平等的自由权利;第二条原则包括差别原则与机会平等原则。前者要求在进行分配的时候,如果不得不产生某种不平等的话,这种不平等应该有利于境遇最差的人们的最大利益,就是说,利益分配应该像处于不利地位的人们倾斜;后者要求将机会平等的原则应用于社会经济的不平等,使具有同等能力、技术与动机的人们享有平等的获得职位的机会。

 

46、《心理学与生活》作者: [美]理查德·格里格

    本书是心理学的入门经典,是美国斯坦福大学多年来使用的教材,也是在美国许多大学里推广使用的经典教材,被ETS推荐为GRE心理学专项考试的主要参考用书。这本书写作流畅,通俗易懂,深入生活,把心理学理论与知识联系人们的日常生活与工作,使它同样也成为一般人了解心理学与自己的极好的读物。

 

47、《玩偶之家》作者: [挪威]易卜生

    娜拉是个具有资产阶级个性解放思想的叛逆女性,伴随着一系列事件,她与丈夫海尔茂的矛盾逐渐激化直至两个人分手。她对社会的背叛和弃家出走,被誉为妇女解放的“独立宣言”,易卜生高超的戏剧创作手法也在这部著作中得到体现。

 

48、《生命是什么》[奥]埃尔温·薛定谔

    理工科学生大概都对薛定谔耳熟能详,这位诺贝尔奖获得者撰写的《生命是什么》更是一本伟大的科学人文经典。这本书专为生命科学的门外汉书写,内容通俗易懂,历史证明这本书成为了推动分子生物学诞生的激励者和推动者。本书适合于任何希望增进科学素养的同学阅读。

 

49.《西方的没落》作者:[德]奥斯瓦尔德·斯宾格勒

    《西方的没落》是著名史学家斯宾格勒上世纪初创作的一部史学巨著,素有“历史博物馆”之称。在书中斯宾格勒从宏大的文化比较形态学的角度以生物生长过程的观念进行历史研究,把世界历史分成八个完全发展的文化,细致考察其各个时期的不同现象,揭示其共同具有的产生、发展、衰亡及毁灭的过程,通过对西方文化的精神逻辑和时代症状的描述,预言西方文化终将走向没落。

 

50.《论法的精神》作者:[法]孟德斯鸠

    公认的十八世纪最伟大的、最深远地影响了历史的作品是哪几部?人们可以很轻易地说出亚当施密的《国富论》、卢梭的《社会契约论》和孟德斯鸠的《论法的精神》。《论法的精神》以法律为中心,又遍涉经济、政治、宗教、历史、地理等领域,内容极为丰富。《论法的精神》中提出的“追求自由”、“主张法制”、“三权分立”等理论,极大地影响了人类社会的发展进程,成为了美、英、法等国的立国之本。

form:http://blog.sina.com.cn/s/blog_4e6af0be0102e6kj.html