What is the difference between footprints and symbols?

What are symbols

Symbols abstract the function of a component and communicates the interface of it to both KiCad and the person reading the schematic.

To to this it at least needs to define the connection points for the schematic with so called pins.

It is suggested to add some artwork to the symbol to do this effectively. The easiest symbol is a so called black box symbol. It simply surrounds the symbol with a box with every pin having a meaningful name shown.

For some symbol classes there are standards that define how such symbols could look like. (As with all standards, they are incompatible to each other. Be inspired by the standard that fits you.)

What is a footprint

Footprints define the physical interface between the pcb and the component (The land pattern) and also include documentation information (outline, polarization mark, reference, …)

The land pattern is either directly taken from the datasheet or derived from the components dimensions (including tolerances) via industry standards. (most likely the suggested land pattern is derived from such a standard as well.)

It at least needs to contain all the connection points (called pads) to solder the component to. (Shape and size/ position of the pad should align with what is given in the datasheet.)

Pads define what features appear on copper, mask and paste layer (copper is the area that is covered by copper. mask gives the cutout in the solder mask layer, paste is the cutout of the solder paste stencil used for reflow soldering. More details see this other FAQ topic)

The area where no other component should be placed is communicated via the courtyard area. This area is larger than the combination of pads and part body.

It is beneficial if it also contains an outline of the component body and a pin 1 marker on silk for soldering/debuging. (All of this should be visible after assembly -> meaning the silk outline is larger than the component body.)

Artwork on the fab layer is beneficial if you want to document your board. (At least it should then contain the exact body outline plus a pin 1 marker.)

Connecting symbol to footprint

In kicad the connection is done via the pin number given to the pins in the symbol and the pad number given to the pads in the footprint.
The pin/pad “number” is not necessarily a number. In kicad 4 it can be any string of lenght less than 4. In KiCad 5 this length limitation will be dropped.

The second part of the connection is made via the footprint field of the symbol.
This field can be set either when creating the symbol (fully specified symbol) or later when it is already placed in eeschema. (generic symbols)

For generic symbols there are two ways to select the footprint. Either via the symbol properties dialog/footprint browser or via cvpcb.
(cvpcb can be used to set the footprint fields of all used symbols at once.) More details about how to assign footprints to symbols see this FAQ entry
In KiCad v5 there is also the option to select the footprint via the component chooser. (This is an experimental feature disabled by default.)

Overview of the KiCad data model

In summary: The schematic uses symbols to define the connectivity of the pcb. Every symbol pin is mapped to its footprint pad as part of this connectivity generation.
Footprints are used by pcb_new to define the interface of every device placed on it.